例行性工作排程(crontab) [Linux鳥哥 Ch15]

Posted by Kubeguts on 2021-05-20

例行性工作排程

Linux 工作排程的種類: at, cron

  • at: 處理一次就結束
    • 需要atd服務支援
  • crontab: 將設定的工作循環下去

常見例行性工作

  • 進行登錄檔的輪替 (log rotate)
  • 登錄檔分析 logwatch 的任務
  • 建立 locate 的資料庫
  • man page 查詢資料庫的建立
  • RPM 軟體登錄檔的建立
  • 移除暫存檔
  • 與網路服務有關的分析行為

循環執行的例行性工作排程 crontab

crontab建立循環型工作排程

可以限制使用 crontab 的使用者帳號確保安全性的問題

規範哪些使用者可以使用 crontab

  • /etc/cron.allow: 將可以使用的帳號加入該檔案內
  • /etc/cron.deny: 將不可以使用的加入該檔案內

allowdeny優先讀取,但系統預設是保留deny

指令

1
crontab [-u username] [-l|-e|-r]

選項與參數

1
2
3
4
-u  :只有 root 才能進行這個任務,亦即幫其他使用者建立/移除 crontab 工作排程;
-e :編輯 crontab 的工作內容
-l :查閱 crontab 的工作內容
-r :移除所有的 crontab 的工作內容,若僅要移除一項,請用 -e 去編輯。

建立的排程都會記錄到 /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
2
3
4
5
6
7
8
crontab -u will -e
no crontab for will - using an empty one

Select an editor. To change later, run 'select-editor'.
1. /bin/ed
2. /bin/nano <---- easiest
3. /usr/bin/vim.basic
4. /usr/bin/vim.tiny

接著定義,每一分鐘就執行一次ls指令

1
*/1 * * * * ls >> ~/linux/crontab/output.txt 2>&1

過1分鐘,就可以在 ~/linux/crontab/產出一個output.txt,將當前目錄資訊印在其檔案內囉

若要再次查看will所定義的crontab:

1
crontab -u will -l

參考