快速入門 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
推薦閱讀: