我的 crontab 有问题 - cron 没有启动我的脚本之一
这是我的 crontab (root) 的顶部部分
SHELL=/bin/bash
#---------------------------------------
# Items availability
#---------------------------------------
# Daily offer import + daily sync everything
30 7 * * * /var/www/import/download_offers.sh > /var/logs/download_offers_cron.log
# Updates availability
# 7:45 mass update happens
*/5 0-6 * * * /var/www/import/check_availability.sh
0,5,10,15,20,25 7 * * * /var/www/import/check_availability.sh
*/5 8-23 * * * /var/www/import/check_availability.sh
#---------------------------------------
# Sales import + sync
#---------------------------------------
# Import EBAY + WWW sales. Run sales cleaner
*/15 * * * * /var/www/import/import_all.sh
*/5 * * * * /var/www/import/import_www.sh
55 13 * * * /var/www/import/import_all.sh
58 13 * * * /var/www/import/import_www.sh
... more stuff 7KB total ...
它曾经在很长一段时间内完美工作,但在上周重新启动该线路后
30 7 * * * /var/www/import/download_offers.sh > /var/log/download_offers_cron.log
停止工作。 download_offers.sh 的内容:
#!/bin/sh
echo "Working..."
echo "Download offers started" > /var/log/import/OFFER_START.log
... some private stuff ; just bunch of wget's and echo's ...
文件/var/log/import/OFFER_START.log
未创建
到目前为止我已经尝试过什么
- 我把时间改成了7:30、8:00(原来是7:45)
- 我添加了
> /var/logs/download_offers_cron.log
但文件尚未创建 - 我浏览了根电子邮件,除了一个脚本之外的所有脚本都已启动
- 文件是 +x 可执行文件
有一些已知的错误吗?除了邮件之外还有其他选项可以调试 crontab 吗?为什么脚本根本不启动?上周重启后它曾经工作正常......
请帮助我失去理智
编辑:
我正在使用 CentOS 版本 6.6(最终版)
这是/var/log/cron
Mar 10 07:30:01 serverpro1 CROND[11291]: (root) CMD (/var/www/import/download_offers.sh > /var/logs/download_offers_cron.log)
看起来 cron 条目没问题,但是没有 /var/log/download_offers_cron.log 文件?
答案1
它又神奇地起作用了
我唯一改变的是
30 7 * * * /var/www/import/download_offers.sh > /var/logs/download_offers_cron.log
^^ here
到
30 7 * * * /var/www/import/download_offers.sh > /var/log/download_offers_cron.log
^^ here
为什么它会导致错误并且脚本根本不起作用?我不知道
为什么脚本首先停止工作是未解之谜
答案2
检查 /var/log/syslog 文件中关于 cron 作业的内容。从日志中查找单词“cron”并检查错误是什么。使用下面的命令来检查相同的内容。
grep -i cron /var/log/syslog
否则你提到的一切都很好。
答案3
你的 crontab 说要使用 bash,但是当你运行脚本时,你实际上再次使用 'sh' shell,因此你丢失了所有环境变量。我上周刚刚遇到这个问题。我的问题是当脚本在 cron 中运行时我没有路径变量,但是当我手动运行它时脚本运行良好。
您可以通过在脚本顶部的 #!/bin/sh 之后执行此操作来测试这一点:
echo $PATH
echo $path
sleep 10
当你的脚本由 cron 运行时。我不记得“sh”使用了哪条路径,所以回显两者。
也许不要在脚本中使用“sh”?
或者,对于您运行的每个实用程序,输入该实用程序的完整路径、每个输入和每个输出文件。
所以如果你的脚本说:
wget ...
您可以将其替换为完整路径:
/usr/bin/wget ...
或者任何正确的路径是什么。
(我还不能添加评论,所以无法回复评论。抱歉。)
答案4
这似乎是一个打字错误。
在您使用的第一个脚本中/var/log
,但在新脚本中它是/var/logs
. Log 是标准目录,但您似乎使用 logs