Cron任务没有输出到nohup.out文件。

15

我有一个名为start.sh的bash脚本,通过Ubuntu服务器上的CRON JOB运行。

start.sh包含下面的代码行:

/home/ubuntu/folder1/folder2/start.shstart.sh的路径。

#!/bin/bash

crawlers(){
    nohup scrapy crawl first &
    nohup scrapy crawl 2nd &
    wait $!
    nohup scrapy crawl 3rd &
    nohup scrapy crawl 4th &
    wait
}

cd /home/ubuntu/folder1/folder2/
PATH=$PATH:/usr/local/bin
export PATH

python init.py &
wait $!
crawlers
python final.py

我的问题是,如果我在命令行上自己运行 start.sh,它会在 nohup.out 文件中输出。

但是当它通过 cronjob 执行这个 bash 文件 时(尽管脚本运行正常),它不会产生 nohup.out

我该如何将这个 cronjob 的 输出 写入 nohup.out


2
你是在哪里创建这个 nohup.out 文件的?请记住,cron 作业的默认工作目录是正在运行它们的用户 ID 的主目录。如果你使用相对路径来创建此文件,那么相对路径将是相对于该账户的主目录,而不是你自己的 shell 当前目录。 - Marc B
@MarcB 我在Linux上是个新手..每行都在nohup中追加输出,例如 nohup scrapy crawl 3rd &我已经将其添加到crontab中 40 10 * * * /home/ubuntu/folder1/folder2/start.sh - akhter wahab
1
FYI:构造python init.py & wait $!(分布在两行上)是无意义的;去掉&并删除wait。它不是您问题的因素;它也可以按原样工作。但这是无意义的。 - Jonathan Leffler
1个回答

25

你为什么在使用nohupnohup 是一个命令,能够让运行中的终端忽略挂起信号。然而cron并没有挂起信号,因为它不与终端会话相关联。

在这种情况下,可以用以下方式代替:

nohup scrapy crawl first &

您可能需要:

scrapy crawl first > first.txt &

最后一个示例也适用于终端,但是当您关闭终端时,会发送挂起信号(hup),这将结束程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接