我有一个bash脚本foo.sh位于 /etc/cron.daily 目录,chmoded 700,由root拥有,crontab列表为root用户不变(crontab -l)从核心Debian安装 . 我确实以不同于crontab -l和/或crontab -e的方式运行cronjob(例如我没有使用/etc/init.d/cron重新启动cron守护进程,因为在特定的Debian 's case). Despite a test job file is running under similar conditions. The script is debugged and can be run as a standalone task without returning errors. I' ve中也建议检查日志(/ var / log) / syslog)并没有错 .
But :这个特殊的工作根本没有执行 .
3 回答
哎呀 . 猜猜我发现了“为什么”或者至少是“如何”:
只有 renaming the job filename without ".sh" extension 解决了这个问题 .
我认为这是Debian的错误但不是,如下面的其他答案中所述 .
解决方案:通过从名称中删除所有
.
或+
个字符来重命名脚本/etc/cron.daily脚本由run-parts执行(参见man 8 run-parts) .
你可以从手册页中找到一个片段:
从/ etc / crontab你可以看到每天的cron作业正在运行:
debian不使用anacron,并且没有为run-parts指定--lsbsysinit选项(在这种情况下' . '将在cron脚本文件名中根据LSB层次结构和保留名称空间接受)
无论如何,为了确保cron能够运行你的脚本,你总是可以运行run-parts并检查你的脚本是否在run-parts输出中列出:
要么
我希望我的评论可以帮助您了解真正的问题 .
以前给出的所有答案都是好的,并且可以接受 . 但是,我相信我应该加上我的观点,以表明Debian Linux操作系统不支持包含
.
或+
字符的cron作业文件名 . 请参阅Debian Policy Manual中的relevant section .所以这只是为了避免混淆,这不是一个错误 . 这就是Debian的工作方式 .