2011-03-30 49 views
7

我有一個bash腳本foo.sh地處/etc/cron.daily目錄,chmoded 700,屬於root,root用戶的crontab名單不變(crontab的 - l)從核心Debian安裝。我以另一種方式運行cronjob,而不是crontab -l和/或crontab -e(例如,我沒有在/etc/init.d/cron中重啓cron守護進程,如特定Debian的案例所示)。儘管測試作業文件在類似條件下運行。該腳本被調試並可以作爲獨立任務運行而不會返回錯誤。我也檢查了日誌(/ var/log/syslog),沒有錯。Debian的Linux的crontab中作業未執行

但是:這個特定的工作根本沒有執行。

回答

13

糟糕。我想我找到了「爲什麼」,或者至少,「如何」:

只有重命名工作文件名沒有「.SH」擴展解決了這個問題。

我認爲這是一個Debian的錯誤,但它不是,如下面的其他答案中所述。

解決方案:從它的名字

+1

這是特定於debian。就他們而言,這不是一個錯誤。 – 2011-03-30 13:03:56

+1

@ gms8994:thx,但是我沒有發現任何關於作業文件名的地方。我故意發現它,進行二分法測試。 – hornetbzz 2011-03-30 13:07:33

+2

我發現它是一樣的;請參閱[我的問題](http://serverfault.com/questions/99584/not-all-cron-jobs-in-etc-cron-daily-are-running)瞭解更多信息。 – 2011-03-30 13:13:34

8

的/etc/cron.daily腳本由運行部分(請參見man 8運行部分)執行刪除所有.+字符重新命名你的腳本。

你去那裏用的手冊頁,可謂物美價廉:

如果既--lsbsysinit選項也不 的--regex給出選項,則 名稱必須完全由上 和小寫字母,數字, 下劃線和連字符。

從/ etc/crontab中可以看到,每天的cron作業正在與運行:

25 6 * * * root test -x /usr/sbin/anacron || (cd/&& run-parts --report /etc/cron.daily) 

Debian沒有使用anacron的和有(用於運行部分沒有指定--lsbsysinit選項在這種情況下,「」將在cron的腳本文件名被接納爲每LSB的層次和保留的命名空間)

反正,以確保cron將會運行腳本,你總是可以運行的運行部件,並檢查你的腳本列在運行部件輸出中:

run-parts --test /etc/cron.daily 

run-parts --list /etc/cron.daily 

我希望我的意見可以幫助您瞭解真正的問題是什麼。

+0

是的,它確實幫助我進一步瞭解cronjob背景。我並不瞭解這些觀點。 thx + 1 pt。 – hornetbzz 2011-03-30 14:03:55

+0

偉大的答案 - 你只是節省了一些時間調試。 – 2012-01-31 05:01:43

+0

即使您使用了'--lsbsysinit',run-parts仍然不會接受'foo.sh'。它會接受'foo.-sh'。它需要匹配這個正則表達式:'^ _?([a-z0-9 _。] + - )+ [a-z0-9] + $' – wisbucky 2015-03-12 00:31:05

0

以前給出的答案都是好的,並且可以接受這個問題。不過,我相信我應該補充一點我的觀點,即Debian Linux OS不支持包含.+字符的cron作業文件名。請參閱Debian Policy Manual中的relevant section

所以這只是爲了避免混淆,它不是一個錯誤。這就是Debian的工作原理。

+0

嗨slugster,感謝您的努力編輯。它對我來說並不重要,它如何被稱爲「時期」或「點」或什麼都不是。對我而言,這意味着相同。現在只需閱讀標誌即可清楚。 – miklosq 2014-03-03 11:11:39