Crontab在/etc/cron.d中永远不会运行


32

这是我对Debian Jessie所做的事情:

  • 通过安装cron apt-get install cron
  • 放入backup_crontab文件/etc/cron.d/

但是,该任务永远不会运行。

以下是一些输出:

/# crontab -l
no crontab for root

/# cd /etc/cron.d && ls
backup_crontab

/etc/cron.d# cat backup_crontab
0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

是否需要做一些事情来激活特定的crontab或激活cron“服务”本身?


4
如果它正在运行并且由于出现错误而失败,并且由于将所有输出重定向到/ dev / null而看不到该怎么办?:)
天衣

@tink是否可以将输出附加到文件末尾?
吉万

2
当然是 0,15,30,45 * * * * /backup.sh >> / TMP / testing_cron.out 2>&1
天衣

@Jivan,请注意:ls /etc/cron.d相当于cd /etc/cron.d && ls输出。唯一的区别是工作目录不会更改。
德鲁·查平

Answers:


49

/etc/cron.d需要的文件还列出了要在其下运行作业的用户

0,15,30,45 * * * * root /backup.sh >/dev/null 2>&1

您还应该确保正确设置了权限和owner:group(-rw-r--r--并由拥有root:root


16
crontab -l报告cron条目/var/spool/cron/crontabs/-- 每个用户的 crontabs。 /etc/cron.d文件是系统crontabs,不由报告crontab -l
史蒂芬·哈里斯

5
实际上,我提到它无法正常工作,但是我只是意识到它是在添加root文件之后-只是crontab -l没有提到它,正如您所解释的那样-感谢您的帮助
-Jivan

9
似乎文件名也有作用。就我而言,我已经etc/cron.d在名称中间添加了一个带点的文件,并且直到将其重命名后才执行该作业
pic

20
同样的问题,文件名中的破折号“-”,将其更改为下划线“ _”解决了该问题,作业立即运行。
罗布

1
我也有一个破折号...什么...。为什么?!无论如何,谢谢@Rob
Nikolay Dimitrov

8

我观察到的另一件事是其中的文件/etc/cron.d不能具有扩展名。在我的特定情况下,我有一个符号链接:

# my-job.crontab
* * * * * root echo "my job is running!" >> /tmp/my-job.log

$: ln -sf /home/me/my-job.crontab /etc/cron.d/
# This did not work -> job would not run

$: ln -sf /home/me/my-job.crontab /etc/cron.d/my-job
# This did work -> job ran fine

文件名限制在运行部分手册中记录:http : //manpages.ubuntu.com/manpages/xenial/man8/run-parts.8.html,可以传递--regex选项以覆盖文件格式。

但是默认的cron行为没有扩展,请参见以下注释:https : //bugs.launchpad.net/ubuntu/+source/debianutils/+bug/38022


伙计,你救了我的一天!
elboletaire '18 -10-1

2
这在Ubuntu上是正确的(也许在所有Debian发行版中)。在Amazon Linux(以及可能在所有Redhat发行版中)上,文件名中可以​​有一个点。谢谢Unix.SE。
Law 29

我只是检查了一个纯Debian,那里的圆点也不起作用。破折号确实起作用(与上面的评论不同)。
Law 29

4

我认为您可能只是在cron文件末尾缺少了必要的空白行。我遇到了同样的问题,但是在检查了此处列出的所有内容(用户权限,文件名,cron版本等)之后,我意识到我的最后一个条目之后没有换行符/etc/cron.d/own_cron,这导致整个文件被忽略。


2

如果您是这台计算机上的唯一用户,则可能只需要使用crontab -e。首次运行命令时,系统将提示您选择编辑器。然后,您可以将其添加到其中:

0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

如果您更改为普通用户帐户,则需要使用sudo crontab -e来配置要计划运行为的脚本root

crontab -l使用进行设置后,仅显示当前的crontab crontab -e。如果/etc/cron.d/中有cron文件,则不会显示crontab -l

您还需要使用以下命令验证脚本是否可执行:chmod +x /backup.sh


1
谢谢-在这种情况下,crontab是在a的上下文中设置的,Dockerfile所以我实际上不能这样做crontab -e-但这还是有用的信息
Jivan

2

对于来自* bian发行版的Cron(例如Raspbian),您需要启用-lCron守护程序的参数。建议使用/etc/default/cronconfig文件启用EXTRA_OPTS


尽管对此没有解释,但还是对此进行了投票,但这在某些情况下是正确的。在基于Debian的发行版-l上,cron守护程序的选项授权/etc/cron.d目录中扩展的文件名集,因此,如果由于文件中包含点而忽略了该文件,则可以“添加-l”或“删除点”将解决问题。
Law 29

1

检查您的的版本cron

似乎,如果您在使用Dillon的crond,则不需要用户/etc/cron.d输入。

我几乎拔出剩余的头发后就知道了。

我有一些条目已被/etc/cron.d各种安装删除。经过一番调查,我发现其中一个正在工作。它没有用户。因此,我将用户带离了其他用户。他们开始工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.