2012年3月2日

Linux/Unix crontab 循環排程指令說明

 

Linux/Unix 系統裡要做排程式利用crontab來達成的,其用處就是定義系統在固定時間執行要跑的程式,最小時間單位為,排定時間有以下變化:

 

  • 間隔幾分鐘,像每隔5分鐘

  • 每天 某時:分,像每天11點30分

  • 每周幾的某時:分,像每周1的13點30分

  • 每月某日的某時:分,像每個月的1號的13點30分

  • 日/周/月還可以變化每幾日, 每幾月..

  • 要有定時裝置,記憶体內要常註 /usr/sbin/crond 程式

    一般 Linux 在開機時會自動載入,如果發現無 crond 在跑,
    可以到 /etc/rc.d/ 目錄下看看是否有將執行crond 程式的指令加入開機自動執行檔裡面。

    使用者可以用 crontab -e 指令來編寫需要做的工作或者將要執行的工作
    或寫在一個 file 裡,再執行 crontab filename 就可以了
    所有使用者的 crontab 檔都會存檔 /usr/spool/cron/crontab/ 下,檔名就是該帳號的名字。

    crontab 的格式如下,以空白分隔:
    週幾 指令串
    以上比較要注意是週的數字為 0 或 7 時,都代表『星期天』的意思
    還有一些輔助的字符,大概有底下這些:


    *(星號)
    代表任何時刻都接受的意思!舉例來說,範例一內那個日、月、週都是 * , 就代表著『不論何月、何日的禮拜幾的 12:00 都執行後續指令』的意思!

    ,(逗號)
    代表分隔時段的意思。舉例來說,如果要下達的工作是 3:00 與 6:00 時,就會是:

    0 3,6 * * * command
    時間參數還是有五欄,不過第二欄是 3,6 ,代表 3 與 6 都適用!

    -(減號)
    代表一段時間範圍內,舉例來說, 8 點到 12 點之間的每小時的 20 分都進行一項工作:

    20 8-12 * * * command
    仔細看到第二欄變成 8-12 喔!代表 8,9,10,11,12 都適用的意思!

    /n(斜線)
    那個 n 代表數字,亦即是『每隔 n 單位間隔』的意思,例如每五分鐘進行一次,則:

    */5 * * * * command

    很簡單吧!用 * 與 /5 來搭配,也可以寫成 0-59/5 ,相同意思!


    另外寫 crontab 時需注意必須使用 絕對路徑,因此必須寫成 /usr/bin/test.sh


    我們就來搭配幾個例子練習看看吧!
    例如:
    30 12 * * * sh /usr/bin/test.sh
    -->在 12:30 時跑 /usr/bin/test.sh 這個Shell



    以下是一些範例:


    格式:
    分 時 日 月 週幾 指令串
    # 每日 6:10 a.m. 跑sh /usr/bin/test.sh
    10 6 * * * sh /usr/bin/test.sh

    # 每兩小時,在0分時
    0 */2 * * * sh /usr/bin/test.sh

    # 每兩小時從 11p.m. to 7a.m., 以及在 8a.m.
    0 23-7/2,8 * * * sh /usr/bin/test.sh

    # 在每月4號和每週一/二/三的 11:00 a.m.

    0 11 4 * mon-wed sh /usr/bin/test.sh

    #  一月一號的4:00 a.m.

    0 4 1 jan * sh /usr/bin/test.sh

    沒有留言:

    張貼留言