3

我的 crontab 没有运行,我试图找出原因。我在其中创建了一个符号/etc/cron.d链接/var/www/mysite.crontab

user@ip-xxxxxxxxxx:/etc/cron.d$ ll
total 20
drwxr-xr-x  2 root root 4096 Apr 11 03:48 ./
drwxr-xr-x 96 root root 4096 Apr 16 00:50 ../
lrwxrwxrwx  1 root root   30 Apr 11 03:47 mysite.crontab -> /var/www/mysite.crontab
-rw-r--r--  1 root root  124 Feb 27  2012 drupal7
-rw-r--r--  1 root root  544 Sep 12  2012 php5
-rw-r--r--  1 root root  102 Apr  2  2012 .placeholder

实际的 cron 文件是...

#Purge old deals
4 1 * * * www-data wget -q -O- http://www.mysite.com/cron/clean > /dev/null 2>&1;
4

1 回答 1

3

奇怪的是,问题出在文件名上。不允许在目录中使用 a.作为文件名的一部分/etc/cron.d

其逻辑在database.c文件中,在函数中valid_name。将文件重命名为 mysite_crontab 之类的名称应该可以解决问题。

一般来说,文件名可能只是一个简单的名称mysite,它在这个目录中的事实意味着它已经是一个 cron 文件。

指向的文件必须由 root 拥有,在手册页中说明了该/etc/cron.d目录的支持:

/etc/cron.dcron 守护程序本身包含对 的支持 ,它将这个位置作为系统范围的 crontab 假脱机处理。这个目录可以包含任何文件定义任务遵循使用的格式/etc/crontab,即与用户 cron spool 不同,这些文件必须提供用户名来运行任务定义中的任务。

此目录中的文件必须由 root 拥有,不需要可执行(它们是配置文件,就像/etc/crontab)并且必须符合 run-parts(8) 使用的相同命名约定:它们必须仅由 upper - 和小写字母、数字、下划线和连字符。这意味着它们不能包含任何点。如果将-l选项指定为 cron(此选项可以通过 设置,见下文),则它们必须符合 LSB 命名空间规范,与run-parts/etc/default/cron中的选项完全相同。--lsbsysinit

此功能的预期目的是允许需要比/etc/cron.{hourly,daily,weekly,monthly}目录更精细地控制其调度的软件包将 crontab 文件添加到 /etc/cron.d。此类文件应以提供它们的软件包命名。

于 2013-04-16T12:10:44.457 回答