2013-04-16 147 views
2

我的crontab没有运行,我试图找出原因。我创建内/etc/cron.d的符号链接/var/www/mysite.crontabCrontab没有运行

[email protected]:/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; 
+2

尝试更改'/ bin/wget'的'wget'或任何来自哪个'wget'。另外,做一个简单的测试'* * * * */usr/bin/touch/tmp/file'来查看它是否是crontab或脚本的问题。 – fedorqui

+0

@fedorqui - 我通过'sudo service cron restart'重新启动cron,以确保最新的更改已加载并且文件未被触及: - \ – Webnet

+0

'/ usr/sbin/cron'守护进程是否正在运行? –

回答

3

奇怪的问题是该文件的名称。当存在于/etc/cron.d目录中时,不允许使用.作为文件名称的一部分。

此逻辑位于database.c文件的功能valid_name中。将文件重命名为mysite_crontab之类的内容可以解决这个问题。

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

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

/etc/cron.d支持包括在cron守护程序本身,将该位置作为系统范围的crontab线程处理。该目录可以包含任何定义了/etc/crontab中使用格式的任务的文件,即与用户cron假脱机文件不同,这些文件必须提供用户名才能像任务定义中那样运行任务。

文件在这个目录中必须由根拥有,不需要是可执行文件(它们都是配置文件,就像/etc/crontab)和13759运行零件必须符合相同的命名约定(8) :它们必须仅由大写和小写字母,数字,下划线和连字符组成。这意味着他们不能包含任何点。如果将-l选项指定为cron(此选项可通过/etc/default/cron设置,请参阅下文),则它们必须符合LSB名称空间规范,与运行部分中的--lsbsysinit选项完全相同。

此功能的预期用途是允许需要比/etc/cron.{hourly,daily,weekly,monthly}目录更好地控制其调度的程序包,以将/ crontab文件添加到/etc/cron.d。这些文件应该在提供它们的软件包后命名。

+0

我已经更改了文件名并重新启动了cron,并没有任何证据表明它正在工作。 – Webnet

+0

当我说'文件的名称'时,我的意思是/etc/cron.d中的条目必须遵循命名约定。你重制了符号链接吗?如果测试crontabs,我通常每分钟运行一次cron job更新一个时间戳文件,我可以检查 – Petesh

+0

我没有将文件从'mysite.cron'重命名为'mysite_cron'。我还使用了@ fedorqui的建议测试:'* * * * */usr/bin/touch/tmp/file' – Webnet