天天看點

linux下添加crond定時任務

一.crond指令

crond 是linux用來定期執行程式的指令。當安裝完成作業系統之後,預設便會啟動此任務排程指令。crond指令每分锺會定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作。

       /sbin/service crond start    //啟動服務

  /sbin/service crond stop     //關閉服務

  /sbin/service crond restart  //重新開機服務

  /sbin/service crond reload   //重新載入配置

      /sbin/service crond status   //檢視服務狀态

crond讀取一個或多個配置檔案,這些配置檔案中包含了指令行及其調用時間。

crond的配置檔案稱為“crontab”,是“cron table”的簡寫。

二.crond在3個地方查找配置檔案

1、/var/spool/cron/ 這個目錄下存放的是每個使用者包括root的crontab任務,每個任務以建立者的名字命名,比如tom建的crontab任務對應的檔案就是/var/spool/cron/tom。

一般一個使用者最多隻有一個crontab檔案。

2、/etc/crontab 這個檔案負責安排由系統管理者制定的維護系統以及其他任務的crontab。

3、/etc/cron.d/ 這個目錄用來存放任何要執行的crontab檔案或腳本。

三.權限

crontab權限問題到/var/adm/cron/下一看,檔案cron.allow和cron.deny是否存在

用法如下: 

1、如果兩個檔案都不存在,則隻有root使用者才能使用crontab指令。 

2、如果cron.allow存在但cron.deny不存在,則隻有列在cron.allow檔案裡的使用者才能使用crontab指令,如果root使用者也不在裡面,則root使用者也不能使用crontab。 

3、如果cron.allow不存在, cron.deny存在,則隻有列在cron.deny檔案裡面的使用者不能使用crontab指令,其它使用者都能使用。 

4、如果兩個檔案都存在,則列在cron.allow檔案中而且沒有列在cron.deny中的使用者可以使用crontab,如果兩個檔案中都有同一個使用者,

以cron.allow檔案裡面是否有該使用者為準,如果cron.allow中有該使用者,則可以使用crontab指令。

四. crontab指令

crond服務提供crontab指令來設定crond服務的,以下是這個指令的一些參數與說明:

       crontab -u //設定某個使用者的crond服務,一般root使用者在執行這個指令的時候需要此參數  

     crontab -l //列出某個使用者crond服務的詳細内容

     crontab -r //删除某個使用者的crond服務

     crontab -e //編輯某個使用者的crond服務

比如說root檢視自己的crond設定:crontab -u root -l

再例如,root想删除fred的crond設定:crontab -u fred -r

五.配置crontab

可用crontab -e指令來編輯,編輯的是/var/spool/cron下對應使用者的cron檔案,也可以直接修改/etc/crontab檔案

具體格式如下:

Minute Hour Day Month Dayofweek   command

分鐘     小時   天     月       天每星期       指令

每個字段代表的含義如下:

     Minute             每個小時的第幾分鐘執行該任務,0-59

     Hour                每天的第幾個小時執行該任務,0-23

     Day                  每月的第幾天執行該任務,1-31

     Month             每年的第幾個月執行該任務,1-12

     DayOfWeek     每周的第幾天執行該任務,0-6,0表示星期日,也可以用英文來表示,sun表示星期天,mon表示星期一

     Command       指定要執行的程式

記住幾個特殊符号的含義:

    “*”代表取值範圍内的數字,

    “/”代表”每”,

    “-”代表從某個數字到某個數字,

    “,”分開幾個離散的數字

舉例如下:

5       *       *           *     *     ls             指定每小時的第5分鐘執行一次ls指令

30     5       *           *     *     ls             指定每天的 5:30 執行ls指令

30     7       8         *     *     ls              指定每月8号的7:30分執行ls指令

30     5       8         6     *     ls              指定每年的6月8日5:30執行ls指令

30     6       *           *     0     ls            指定每星期日的6:30執行ls指令

30     3     10,20     *     *     ls              每月10号及20号的3:30執行ls指令

25     8-11  *           *     *     ls            每天8-11點的第25分鐘執行ls指令

*/15   *       *           *     *     ls            每15分鐘執行一次ls指令

30      6     */10    *     *     ls               每個月中,每隔10天6:30執行一次ls指令

50      7       *      *     *     root     run-parts   /etc/cron.daily  

                                                        每天7:50以root 身份執行/etc/cron.daily目錄中的所有可執行檔案[ 注:run-parts參數表示,執行後面目錄中的所有可執行檔案。 ]

六.crontab中的輸出配置

以上的定時任務執行結果都被輸出到對應使用者的email中,crond支援将執行結果輸出到指定檔案中

crontab中經常配置運作腳本輸出為:>/dev/null   2>&1,來避免crontab運作中有内容輸出。

shell指令的結果可以通過‘> ’的形式來定義輸出

/dev/null 代表空裝置檔案  

> 代表重定向到哪裡,例如:echo     "123"     > /home/123.txt 

1 表示stdout标準輸出,系統預設值是1,是以">/dev/null"等同于"1>/dev/null"

2 表示stderr标準錯誤

& 表示等同于的意思,2>&1,表示2的輸出重定向等同于1 

那麼重定向輸出語句的含義:

1>/dev/null 首先表示标準輸出重定向到空裝置檔案,也就是不輸出任何資訊到終端,不顯示任何資訊。

2>&1 表示标準錯誤輸出重定向等同于标準輸出,因為之前标準輸出已經重定向到了空裝置檔案,是以标準錯誤輸出也重定向到空裝置檔案。

例1:每天5:30執行ls指令,并把結果輸出到/jp/test.log檔案中

30     5     *     *     *     ls     >/jp/test.log     2>&1

七.crontab與環境變量

不要假定crond知道所需要的特殊環境,它其實并不知道。是以你要保證在要執行的shelll腳本中提供所有必要的路徑和環境變量,除了一些自動設定的全局變量。是以注意如下3點:

1、腳本中涉及檔案路徑時寫全局路徑;

2、腳本執行要用到java或其他環境變量時,通過source指令引入環境變量,如:

    cat start_cbp.sh

 #!/bin/sh
 source /etc/profile
 export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
 /usr/local/jboss-4.0.5/bin/run.sh -c mev &      

3、當手動執行腳本OK,但是crontab死活不執行時。這時必須大膽懷疑是環境變量惹的禍,并可以嘗試在crontab中直接引入環境變量解決問題。如:

0     *     *     *     *     . /etc/profile;/bin/sh     /var/www/java/audit_no_count/bin/restart_audit.sh

八.其他應該注意的問題

1、新建立的crond job,不會馬上執行,至少要過2分鐘才執行。如果重新開機crond則馬上執行。

2、

每條 JOB 執行完畢之後,系統會自動将輸出發送郵件給目前系統使用者。日積月累,非常的多,甚至會撐爆整個系統。是以每條 JOB

指令後面進行重定向處理是非常必要的: >/dev/null  2>&1 。前提是對 Job

中的指令需要正常輸出已經作了一定的處理,

比如追加到某個特定日志檔案。

3、當crontab突然失效時,可以嘗試/etc/init.d/crond restart解決問題。或者檢視日志看某個job有沒有執行報錯    tail -f /var/log/cron。

4、千萬别亂運作crontab -r。它從Crontab目錄(/var/spool/cron)中删除使用者的Crontab檔案。删除了該使用者的所有crontab都沒了。

5、在crontab中%是有特殊含義的,表示換行的意思。如果要用的話必須進行轉義\%,如經常用的date ‘+%Y%m%d’在crontab裡是不會執行的,應該換成date ‘+\%Y\%m\%d’。

附錄:

http://blog.csdn.net/hi_kevin/article/details/8983746

上一篇: 每日總結
下一篇: 每日總結