快速入門 Linux 計劃任務

快速入門 Linux 計劃任務

來自專欄領扣(LeetCode)6 人贊了文章

計劃任務,在 Linux 中一般使用 Crontab,通過 crontab 命令,我們可以在固定的間隔時間執行指定的系統指令或 Shell 腳本。時間間隔的單位可以是分鐘、小時、日、月、周及以上的任意組合。這個命令非常適合周期性的日誌分析或數據備份等工作。

本文盡量以最簡短的篇幅讓大家快速入門 Crontab。


創建和編輯 Crontab

基礎命令格式為:

crontab [-u user] file crontab [-u user] [ -e | -l | -r ]

其中我們只需要關注 -e-u-l,如果沒有 -u 參數,則默認使用的當前用戶的 crontab,-l 可以列出某個用戶的 crontab,-e 則是編輯某個用戶的 crontab。

看例子,假設當前為 root 用戶,且想要編輯 leetcode 用戶的 crontab,則使用:

# crontab -u leetcode -e


Crontab 基礎

一個通用的說法如下:

分 時 日 月 星期 要運行的命令

  • 第1列分鐘0~59
  • 第2列小時0~23(0表示子夜
  • 第3列日1~31
  • 第4列月1~12
  • 第5列星期0~7(0和7表示星期天)
  • 第6列要運行的命令

但是這樣太複雜了,在常見的 Linux 中,有很多語法糖,例如:

  • @yearly # 每年一次
  • @monthly # 每月一次
  • @weekly
  • @daily
  • @hourly
  • @reboot # 每當重啟過後

所以對於一些簡單的計劃任務我們完全可以使用語法糖來寫,例如,我希望每一次重啟後記錄一下日期到 /root/rebootlog.txt ,可以這樣寫:

@reboot /bin/echo date > /root/rebootlog.txt

當然,如果是一些複雜的要求,比如「每隔兩天的上午8點到11點的第3和第15分鐘執行「的話,就需要去使用默認的寫法了,例如上述要求的寫法為:

3,15 8-11 */2 * * /path/to/command

又如每天晚上 23:30 執行一條指令:

30 23 * * * /path/to/command

怎麼樣,是不是很好理解?

另外有一個網站: crontab guru 提供了一個圖形化的配置界面,有興趣的同學可以上去看看。


一些注意事項

要確認一個計劃任務是否已經完成,可以試試:

tail -f /var/log/cron。

一定要假設 crontab 對外部環境變數不了解,所以所有的指令儘可能寫絕對路徑。

作者:Nova

推薦閱讀:

TAG:Linux | IT行業 | 操作系統 |