- Linux/Unix 系統中用來讓系統各使用者自行設定在需要的時間 ,做需要的事的程式。
- crontab 這個指令所設定的工作將會循環的一直進行下去! 除了可以使用指令執行外,亦可編輯 /etc/crontab 來支援。
- 讓 crontab 可以生效的服務則是 crond 這個服務。
- 若只需處理僅執行一次就結束排程的指令,可用 at 。
* 一般 Linux 在開機時會自動載入,如果發現無 crond 在跑,可以到 /etc/rc.d/ 目錄下看看是否有將執行crond 程式的指令加入開機自動執行檔裡面。
* User Name -> crontab file name
- 當使用者使用 crontab 這個指令來建立工作排程之後,該項工作就會被紀錄到 /var/spool/cron/ 裡面去了,而且是以帳號來作為判別的。
- 所有使用者的 crontab 檔都會存檔 /usr/spool/cron/crontab/ 下,每個人都只有一個檔案存在,檔名就是該帳號的名字。ex:
- dmtsai 使用 crontab 後, 他的工作會被紀錄到 /var/spool/cron/dmtsai。
[Note] 不要使用 vi 直接編輯該檔案, 因為可能由於輸入語法錯誤,會導致無法執行 cron 。
* cron 執行的每一項工作都會被紀錄到 /var/log/cron 這個登錄檔中。
* Re-start /etc/init.d/crond restar
在 Linux 底下的 crontab 會自動的幫我們每分鐘重新讀取一次 /etc/crontab 的例行工作事項,但是某些原因或者是其他的 Unix 系統中,由於 crontab 是讀到記憶體當中的,所以在你修改完 /etc/crontab 之後,可能並不會馬上執行, 這個時候請重新啟動 crond 這個服務吧!『/etc/init.d/crond restart』。
* syntax:
#crontab [-u username] [-l|-e|-r] /* 選項與參數: -u : 只有 root 才能進行這個任務,亦即幫其他使用者建立/移除 crontab 工作排程; -e : 編輯 crontab 的工作內容 -l : 查閱 crontab 的工作內容 -r : 移除所有的 crontab 的工作內容,若僅要移除一項,請用 -e 去編輯。 */
[Note]
- 如果只是要刪除某個 crontab 的工作項目,那麼請使用 crontab -e 來重新編輯即可!』如果使用 -r 的參數,是會將所有的 crontab 資料內容都刪掉的。
- 使用者可以用 crontab -e 指令來編寫需要做的工作或者將要執行的工作,或寫在一個 file 裡,再執行 crontab filename 就可以了。
- 注意必須使用 絕對路徑。
ex:
// 此時會進入 vi 的編輯畫面讓您編輯工作,然後以一個工作一行來編輯,
// 編輯完畢之後輸入『 :wq 』儲存後離開 vi 就可以了。
#crontab -e
* 每項工作 (每行) 的格式都是具有六個欄位,如下:
(minute) (hour) (day of month) (month) (day of week) (job)
* 每欄位可填入的值如下:
- minute: 0-59
- hour: 0-23
- day of month: 1-31
- month: 1-12 (or names, see below)
- day of week: 0-7 (0 or 7 is Sun, or use names),週的數字為 0 或 7 時,都代表『星期天』的意思。
ex:
# 每小時的 5,15,25,35,45,55 分 5,15,25,35,45,55 * * * * (job) # 每個小時 10 分 1 * * * * (job) # 每天早上三點整 0 3 * * * (job) # 每個月一號早上 3:50 50 3 1 * * (job) # 每週日早上 4:30 30 4 * * 0 (job) # 每週六早上 5:30 30 5 * * 6 (job)
* 特殊符號
- 星號(*)
- 代表任何時刻都接受。
- ex: 0 12 * * * (job)
- 日、月、週都是 * , 就代表著『不論何月、何日的禮拜幾的 12:00 都執行後續指令』的意思。
- 逗號(,)
- 代表分隔時段的意思。
- ex: 0 3,6 * * * command
- 要下達的工作是 3:00 與 6:00,第二欄是 3,6 ,代表 3 與 6 都適用 。
- 減號(-)
- 代表一段時間範圍內。
- ex: 20 8-12 * * * command
- 8 點到 12 點之間的每小時的 20 分都進行一項工作,第二欄變成 8-12 ,代表 8,9,10,11,12 都適用的意思。
- 斜線(/n)
- n 代表數字,亦即是『每隔 n 單位間隔』。
- ex: */5 * * * * command
- 每五分鐘進行一次,也可以寫成 0-59/5 ,相同意思。
[Note]
週與日月不可同時並存,
30 12 11 9 5 root echo "just test" <==這是錯誤的寫法
* 進行登錄檔的輪替 (log rotate):
- Linux 會主動的將系統所發生的各種資訊都記錄下來,這就是登錄檔。
- 由於系統會一直記錄登錄資訊,所以登錄檔將會越來越大。
- 我們知道大型檔案不但佔容量還會造成讀寫效能的困擾, 因此適時的將登錄檔資料挪一挪,讓舊的資料與新的資料分別存放,則比較可以有效的記錄登錄資訊。這就是 log rotate 的任務!這也是系統必要的例行任務。
* Reference
- 鳥哥的 Linux 私房菜 -- 例行性工作排程的建立 ***
- Crontab 的寫法(@reboot, @yearly...) | Tsung's Blog
- crontab 使用格式說明 **
沒有留言:
張貼留言