未执行linux debian crontab作业
我有一个bash脚本foo.sh,位于/etc/cron.daily目录下,chmoded 700,由root所有,root用户的crontab列表与核心Debian安装的相同(crontab-l)。我确实以crontab-l和/或crontab-e之外的另一种方式运行了cronjob(例如,我没有按照特定Debian案例中的建议使用/etc/init.d/cron重新启动cron守护进程)。尽管测试作业文件正在类似条件下运行。脚本已调试,可以作为独立任务运行,而不会返回错误。我还检查了日志(/var/log/syslog),其中没有任何错误 但是:此特定作业根本不执行。哎呀。我想我找到了“为什么”或者至少是“如何”: 只有重命名不带“.sh”扩展名的作业文件名才能解决该问题 我原以为这是Debian的bug,但事实并非如此,如下面其他答案所述未执行linux debian crontab作业,linux,debian,crontab,Linux,Debian,Crontab,我有一个bash脚本foo.sh,位于/etc/cron.daily目录下,chmoded 700,由root所有,root用户的crontab列表与核心Debian安装的相同(crontab-l)。我确实以crontab-l和/或crontab-e之外的另一种方式运行了cronjob(例如,我没有按照特定Debian案例中的建议使用/etc/init.d/cron重新启动cron守护进程)。尽管测试作业文件正在类似条件下运行。脚本已调试,可以作为独立任务运行,而不会返回错误。我还检查了日志(/
解决方案:通过删除脚本名称中的所有
或+
字符来重命名脚本etc/cron。日常脚本由运行部件执行(请参阅man 8运行部件)
在这里,您可以使用主页上的剪报:
如果--lsbsysinit选项和
然后给出--regex选项
名称必须完全由大写字母组成
和小写字母、数字、,
下划线和连字符
从/etc/crontab中,您可以看到日常cron作业正在使用以下工具运行:
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
debian不使用anacron,并且没有为运行部件指定--lsbsysinit选项(在这种情况下,“.”将根据LSB分层和保留名称空间在cron脚本文件名中接受)
无论如何,为了确保cron将运行您的脚本,您可以始终运行运行部件,并检查您的脚本是否列在运行部件输出中:
run-parts --test /etc/cron.daily
或
我希望我的评论能帮助你理解真正的问题是什么。之前给出的所有答案都是好的,都是可以接受的。但是,我认为我还应该补充一点,明确说明Debian Linux操作系统不支持包含
或+
字符的cron作业文件名。请参阅中的
所以这只是为了避免混淆,它不是一个bug。Debian就是这样工作的 它是针对debian的。就他们而言,这不是一个bug。@gms8994:thx,但我在任何地方都没有找到关于作业文件名的这一点。我是故意的,做了二分法测试;请参阅以了解更多信息。是的,它确实有助于我进一步了解cronjob的背景。我不知道这几点。thx+1 pt.回答得很好-您刚刚为我节省了一些调试时间。即使您使用了
--lsbsysinit
,运行部件仍然不会接受foo.sh
。不过它会接受foo.-sh。它需要匹配这个正则表达式:^?([a-z0-9.]+-)+[a-z0-9]+$
我可以测试我的crontab吗?嗨,slugster,谢谢你的努力编辑。对我来说,它如何被称为“周期”或“点”或什么都不重要。对我来说,这意味着同样的。现在只要看一下标志就明白了。
run-parts --list /etc/cron.daily