Crontab 在 /etc/cron.d 中从不运行

Jiv*_*van 53 cron debian

这是我在 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
Run Code Online (Sandbox Code Playgroud)

是否可以激活特定的 crontab 或激活 cron“服务”本身?

Ste*_*ris 79

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

IE

0,15,30,45 * * * * root /backup.sh >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

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

  • 同样的问题,文件名中的破折号“-”,将它们更改为下划线“_”解决了问题,作业立即运行。 (25认同)
  • `crontab -l` 报告 `/var/spool/cron/crontabs/` 中的 cron 条目 - 即 _per user_ crontabs。`/etc/cron.d` 文件是系统 crontabs,不会由 `crontab -l` 报告。 (21认同)
  • 似乎文件名也有作用。在我的例子中,我在 `etc/cron.d` 中添加了一个名称中间有一个点的文件,并且在我重命名它之前从未执行过作业 (11认同)
  • 实际上我提到它不起作用,但我才意识到它是在文件中添加了 `root` 之后 - 只是 `crontab -l` 没有提到它,正如你解释的原因 - 感谢你的帮助 (5认同)
  • 我也有一个破折号......什么......为什么?!无论如何,谢谢@Rob (2认同)
  • 有关文件名格式等的更多详细信息... https://unix.stackexchange.com/a/417327/28653 (2认同)

小智 20

我观察到的另一件事是文件/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
Run Code Online (Sandbox Code Playgroud)

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

然而,默认的 cron 行为没有扩展,请参阅以下评论:https : //bugs.launchpad.net/ubuntu/+source/debianutils/+bug/38022

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

小智 12

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


小智 5

对于 *bian 发行版(如 Raspbian)中的 Cron,您需要启用-lCron 守护进程的参数。建议使用/etc/default/cron配置文件来执行此操作,启用EXTRA_OPTS.