例行性工作排程
Linux 工作排程的種類: at, cron
- at: 處理一次就結束
- 需要atd服務支援
- crontab: 將設定的工作循環下去
常見例行性工作
- 進行登錄檔的輪替 (log rotate)
- 登錄檔分析 logwatch 的任務
- 建立 locate 的資料庫
- man page 查詢資料庫的建立
- RPM 軟體登錄檔的建立
- 移除暫存檔
- 與網路服務有關的分析行為
循環執行的例行性工作排程 crontab
crontab建立循環型工作排程
可以限制使用 crontab 的使用者帳號確保安全性的問題
規範哪些使用者可以使用 crontab
/etc/cron.allow
: 將可以使用的帳號加入該檔案內/etc/cron.deny
: 將不可以使用的加入該檔案內
allow
比deny
優先讀取,但系統預設是保留deny
指令
1 | crontab [-u username] [-l|-e|-r] |
選項與參數
1 | -u :只有 root 才能進行這個任務,亦即幫其他使用者建立/移除 crontab 工作排程; |
建立的排程都會記錄到
/var/spool/cron/[帳號]
內
crontab進行的任務log都會記錄到
/var/log/cron
透過crontab執行的工作,都需要定義六個數字,如下
[分鐘(0-59)] [小時(0-23)] [日期(1-31)] [月份(1-12)] [週(0-7)]
週的部分,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
範例:每1分鐘執行 ls
的指令
以will
身份來產生一個cron task,系統會詢問要用什麼編輯器,來編輯cron task
1 | crontab -u will -e |
接著定義,每一分鐘就執行一次ls
指令
1 | */1 * * * * ls >> ~/linux/crontab/output.txt 2>&1 |
過1分鐘,就可以在 ~/linux/crontab/
產出一個output.txt,將當前目錄資訊印在其檔案內囉
若要再次查看will
所定義的crontab:
1 | crontab -u will -l |
參考
- 第十五章、例行性工作排程(crontab)
- Why can’t I see the output of cron jobs in my terminal?