通过 cron 作业运行 Python 脚本没有日志文件输出(或带有输出的电子邮件)

通过 cron 作业运行 Python 脚本没有日志文件输出(或带有输出的电子邮件)

我有以下 cron 作业运行 Python 脚本,在 Crontab 中创建并保存后,该脚本似乎安装正常且没有任何问题(这是在运行 Centos7 的服务器上)。我没有看到日志文件,也没有看到发送到所含电子邮件地址的任何输出。我试过这个:

*/2 * * * * /home/local/DEV/mdub/FTWFB/FTWFBUploader.py > /home/local/DEV/mdub/FTWFB/logs`date +\%Y-\%m-\%d-\%H:\%M:\%S`-cron.log 2>&1 | mailx -s “Facebook Uploads - Cronlog" [email protected]

和这个:

*/2 * * * * /home/local/DEV/mdub/FTWFB/FTWFBUploader.py | tee /home/local/DEV/mdub/FTWFB/logs`date +\%Y-\%m-\%d-\%H:\%M:\%S`-cron.log | mailx -s “Facebook Uploads - Cronlog" [email protected]

我究竟做错了什么?

在我运行的两个文件上chmod +x (filename)以及当我手动运行脚本时,它们都按预期运行和输出。

答案1

首先,配置 crontab 时,请使用要调用的任何命令和脚本的完整路径。例如:

  • tee应该/usr/bin/tee
  • mailx应该/bin/mailx
  • date应该/bin/date

注意:如果您的系统上的路径不同,请进行相应更改

此外,在 crontab 中链接命令(即管道|)很快就会变得混乱。最好将这些命令放入脚本中并从 cron 中调用该脚本。

如果这没有帮助,请按照 cron 的以下常规故障排除步骤操作:

验证crond已启用并正在运行,例如:

$ systemctl status crond | grep enabled
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled)

$ ps -ef | grep ^root.*crond
root      1251     1  0 May15 ?        00:00:55 /usr/sbin/crond -n

检查 cron 日志以查看其中是否出现任何错误(替换UserName为用户名):

grep UserName /var/log/cron

检查该用户的邮件文件以查看是否出现任何 cron 输出:

more /var/mail/UserName

如果其他方法都失败了,请在 crontab 条目末尾附加重定向,以帮助捕获可能出现的任何虚假错误。例如,不要这样做:

* * * * * /bin/date | /usr/bin/mailx -s cron.test [email protected]

做这个:

* * * * * /bin/date | /usr/bin/mailx -s cron.test [email protected] > /tmp/crontab.test.UserName.log 2>&1

答案2

最佳做法是编写一个脚本,然后在 cron 中通过完整路径调用该脚本。这实际上只是在强化 Gene 所说的内容,但编写一个将运行这些命令的脚本可让您在将脚本放入 cron 之前对其进行测试。

此外,从长远来看,这使得 cron 更易于阅读。

答案3

Cron 不允许使用 % 字符。

相关内容