2013-04-16 163 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