天天看點

Linux cron定時指令的使用

    crontab檔案中包含了用于cron守候程序執行的一條或者多條指令,在每條指令中均會指明在指定的日期、指定的時間執行某個特定的指令。每個使用者均擁有自己的crontab表。使用者可以通過下述指令來編輯相應的crontab檔案:

(1)crontab -u    //用于設定某個使用者的cron服務,一般root使用者在執行該指令時需要該參數

(2)crontab -l     //列出屬于某個使用者的cron服務的詳細内容

(3)crontab -r    //删除屬于某個使用者的cron服務

(4)crontab -e   //用于編輯某個使用者的cron服務

    在crontab檔案中,空白行和前導的空格以及制表符均會被忽略。除去空白符,首個字元為“#”的行會被當作注釋,并被忽略。一個有效的crontab行可以用于設定一個環境或者執行一個cron指令。其中,環境變量的設定具有如下形式:name = value。式中,指派符号周圍的空格是可選的,并且value中任何非前導空格均會被當作其值的一部分。字元串類型的值可以位于引号中,包括單引号和雙引号,以便能夠保留前導或者尾部的空格。

    cron守候程序會自動設定一些環境變量。在預設情況下,SHELL将會被設定為/bin/sh,LOGNAME和HOME環境變量将會根據crontab所有者的/etc/passwd行中的值進行設定。HOME和SHELL這兩個環境變量可以被覆寫,但是LOGNAME卻不可以。

    對于每行crontab指令,均由五個時間/日期字段構成,後跟一個使用者名(如果這是一個系統crontab檔案),後跟将要執行的指令。cron每分鐘便會檢查crontab檔案中的條目,以便及時執行合适的指令。crontab檔案中時間和日期字段為:

字段名稱 允許的值
minute(分鐘) 0-59
hour(小時) 0-23
day of month(每月中第幾天) 1-31
month(月) 1-12(或指定月的名稱)
day of week(每周中星期幾) 0-7(0和7表示星期日,或者使用名稱)

    需要注意的是:字段值可以是“*”,表示整個取值區間。同時,對于各個字段可以指定數字區間,區間是兩個數字,中間以-相隔,并且包含兩端的值。同時,各個字段也允許清單值,一個清單是一個數字集合(包含區間),各個值之間以(“,”)相隔。例如:“1, 2, 5, 9”和“0-4, 8-12”等。

   在指定取值區間時,可以指定步長值,例如:0-23/2,表示每兩個小時執行一次。同時,可以在一個“*”符号後指定一個步長值。除去上述五個時間和日期字段,每行中的剩餘部分(直至新的一行或者“%”符号)便是将要執行的指令。該指令将由/bin/sh或者由SHELL環境變量指定的shell來執行。指令中的“%”符号将會被轉換為換行符号。除非使用“\”字元進行轉義,否則“%”符号之後的所有資料将會被發送給該指令作為标準輸入。

    同時,需要注意的是:指令中的“天”可以通過兩個字段來指定:(1)月中的天(day of month);(2)星期中的天(day of week)。如果這兩個字段均被限定,指令将會在比對兩者任一的時間上執行。例如:30 4 1,15 * 5将會使得指定的指令在每月的1日和15日執行,另外加上每周的周五。而5 0 * * * $HOME/bin/daily.job >> $HOME/temp/out 2>&1表明指令将會在每天的00:05分執行。

繼續閱讀