我有以下 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 不允许使用 % 字符。