有人告诉我,要让 cron 任务每小时运行一次,你只需要将一个 shell 脚本放入/etc/cron.hourly
所以我尝试添加
#!/usr/bin/env sh
firefox www.superuser.com
放入一个文件test.sh
并将其放入/etc/cron.hourly/
目录中。然后我chown
将其放入根目录并chmod +x
执行该操作。如果我直接执行它,它会按预期执行。但它不会每小时自动执行一次。我错过了什么?
编辑: 我把脚本改得更简单了,只是
#!/usr/bin/env sh
echo foo > ~/sandpit/bar.txt
然后我等了一个小时,这是我的/var/log/syslog
Nov 1 18:45:01 wim-ubuntu ntpdate[1719]: adjust time server 91.189.94.4 offset -0.149832 sec
Nov 1 18:46:27 wim-ubuntu kernel: [ 106.562460] exe (2058): /proc/2058/oom_adj is deprecated, please use /proc/2058/oom_score_adj instead.
Nov 1 19:17:01 wim-ubuntu CRON[4204]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Nov 1 20:17:01 wim-ubuntu CRON[4793]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
但是我的文件尚未创建,所以我猜我的 cron 作业仍然没有运行。
编辑2:
我删除了扩展,现在我有了 cron 实际找到的脚本。但它们因未知原因而失败(详情如下)
wim@wim-ubuntu:/etc/cron.hourly$ ll
total 28
drwxr-xr-x 2 root root 4096 2011-11-02 01:32 ./
drwxr-xr-x 150 root root 12288 2011-11-02 01:58 ../
-rw-r--r-- 1 root root 102 2011-09-20 10:04 .placeholder
-rwxr-xr-x 1 root root 49 2011-11-01 19:00 test*
-rwxr-xr-x 1 root root 48 2011-11-01 19:23 test2*
wim@wim-ubuntu:/etc/cron.hourly$ run-parts --test /etc/cron.hourly
/etc/cron.hourly/test
/etc/cron.hourly/test2
wim@wim-ubuntu:/etc/cron.hourly$ date
Wed Nov 2 02:25:39 EST 2011
wim@wim-ubuntu:/etc/cron.hourly$ cat test
#!/usr/bin/env sh
firefox www.stackoverflow.com
wim@wim-ubuntu:/etc/cron.hourly$ cat test2
#!/usr/bin/env sh
echo foo > ~/sandpit/bar.txt
wim@wim-ubuntu:/etc/cron.hourly$ tail -4 /var/log/syslog
Nov 2 02:01:33 wim-ubuntu AptDaemon: INFO: Quitting was requested
Nov 2 02:17:01 wim-ubuntu CRON[8249]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Nov 2 02:17:01 wim-ubuntu CRON[8248]: (CRON) error (grandchild #8249 failed with exit status 1)
Nov 2 02:17:01 wim-ubuntu CRON[8248]: (CRON) info (No MTA installed, discarding output)
答案1
某些版本的 cron 不运行带有文件扩展名的脚本,因此请尝试重命名脚本(例如:mv test.sh test)。
您可以使用此测试检查 cron 将运行什么(它实际上并不运行文件):
run-parts --test /etc/cron.hourly
答案2
我仍然不确定为什么 /etc/cron.hourly 中的作业无法运行。但我能够通过命令手动添加它们,以另一种方式安排它们crontab -e
。