2014-11-05 41 views
1

在我的bash腳本有一行表示如下的crontab無效值

echo "2 30 * * * * /usr/bin/test.sh" >> /var/cron/crontabs/root 

這顯然增加作業的crontab,但由於第二值應0-23之間是英寸在這種情況下會發生什麼?

+3

時會發生什麼你自己嘗試一下? – 2014-11-05 20:32:47

+0

'2 30 * * * *'是一個字段太多。 – Cyrus 2014-11-05 20:46:37

+0

這不是寫cronjob的方法。相反,使用'crontab -e'。當你寫這個命令(或任何錯誤的)時,你會得到一個錯誤信息,比如'「/tmp/crontab.R4mE4g":2:bad command','crontab文件中的錯誤,無法安裝。' – fedorqui 2014-11-06 12:26:26

回答

0

沒有保證,因爲這是非法的。這從crontab(5)手冊頁的措辭表明,它只會被忽略:

注意,這意味着不存在的時候,如夏令時轉換「失蹤時間」,永遠不會匹配,導致在調度作業「缺失的時間」不能運行。同樣,多次出現的時間(再次,在夏令時轉換期間)將導致匹配作業運行兩次。

但是,它給出的示例是更合理的場景(例如,您指定在當地時間凌晨2:30在春天的DST當沒有2:30 AM時運行命令)。該手冊頁還指出,小時必須是0-23,並且您違反了該規則。有可能cron(8)會在系統日誌中發生抱怨,或者崩潰,或者做任何其他事情。這也可能會被忽略,而且這種行爲可能會因Unix的不同而有所不同。

總之,你處於未知領域。實際上,它可能不會徹底崩潰,因爲守護進程不會崩潰。但除此之外,你幾乎沒有保證。

1

什麼也沒有。 cron會拒絕運行(不是因爲0-23問題),而是因爲它是一個無效的時間規範,試圖包含參數,而正確的cron條目有。

crontab entry format: 

    * * * * * command_to_execute 
    | | | | | 
    | | | | +- day of week (0-6) (Sunday = 0) 
    | | | +--- month  (1-12) 
    | | +----- day of month (1-31) 
    | +------- hour   (0-23) 
    +--------- minute  (0-59) 

無論值,以下將不起作用:

"2 30 * * * * /usr/bin/test.sh" 
+0

我認爲它將不會運行,因爲30不是有效的小時。我不認爲cron會認識到有太多的時間字段。我認爲它會嘗試執行'*'作爲命令 - 將其展開爲主目錄中的文件列表。如果第一個文件名恰好匹配有效的命令名稱,它應該執行該命令。 (現在我要試試看它是否真的有效。)...不,我得到「crontab文件中的錯誤,無法安裝」。好吧。 – 2014-11-06 01:31:51

+0

但是,在Solaris 9(使用非Vixie crontab實現)中,它實際上起作用。並且'$ PATH'被設置爲'/ usr/bin:'(帶有一個隱含的尾部'.'),所以通過執行命令'*'它實際執行我主目錄中第一個列出的文件,其他文件作爲參數。不是通配符好玩! – 2014-11-06 01:39:52