Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未执行linux debian crontab作业_Linux_Debian_Crontab - Fatal编程技术网

未执行linux debian crontab作业

未执行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守护进程)。尽管测试作业文件正在类似条件下运行。脚本已调试,可以作为独立任务运行,而不会返回错误。我还检查了日志(/

我有一个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,但事实并非如此,如下面其他答案所述


解决方案:通过删除脚本名称中的所有
+
字符来重命名脚本

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