crontab 无法写入日志

crontab 无法写入日志

我使用 crontab 每分钟运行一个 python 脚本。我的 crontab 文件如下所示:

*/1 * * * *  source /root/.bashrc && source /home/env/bin/activate && python /home/manage.py shell < /home/script.py  >> /var/log/navjob.log 2>&1

当尝试使用此命令检查 syslog 中的 cron 输出时,#grep CRON /var/log/syslog输出如下:

...CRON[764888]: (root) CMD (source /root/.bashrc && source /home/env/bin/activate && python /home/manage.py shell < /home/script.py  >> /var/log/navjob.log 2>&1)
...CRON[764887]: (CRON) info (No MTA installed, discarding output)

但是日志文件(/var/log/navjob.log)是空的,并且代码没有运行!

答案1

当你链接命令并添加重定向时,例如

cmd1 && cmd2 && cmd3 >> somefile 2>&1

(或cmd1 ; cmd2 ; cmd3 >> somefile 2>&1等等)重定向仅适用于链中的最后一个命令。要重定向所有命令,您需要将命令分组,例如

{ cmd1 && cmd2 && cmd3 ; } >> somefile 2>&1

或(使用子 shell)

( cmd1 && cmd2 && cmd3 ) >> somefile 2>&1

在这种情况下,你的 cron 任务很可能在第一个source命令时就失败了,因为这source是一个 bashism,而 cron 的默认 shell 是/bin/sh- 要么SHELL=/bin/bash在 crontab 条目前添加,要么更改source为 POSIX.

相关内容