Crontab - 定時任務必備招式

你是否有過這樣的需求,定時在機器上執行一些任務,比如跑數據,清理內容等等。 Crontab 就是做這個事情的標配。

crontab 簡介

這裏的夥伴大多數做客戶端開發的,可能對服務端相關的內容關注的相對少一些。 crontab 是這樣一個工具,他能夠根據你給出的配置在指定的時間執行任務。比如定期刪除過期的日誌文件(很多服務端環境,會生成大量的日誌文件,在你不經意間就會把你的硬盤填滿)。當然,它的應用不僅限於服務端,對於自己本地的電腦來說,也有它的用處。

crontab 是 Unix 系統的標配,幾乎我們常見的大多數類 Unix 系統都自帶 crontab, 包括 MacOS。 Crontab 名字的來源是 chronos - 一種極客們對時間的叫法。 關於它的更多內容,大家可以參考 Wikipedia 上面的描述:https://en.wikipedia.org/wiki/Cron

使用方法

簡單做了介紹之後,咱們來看看怎麼使用。 大家可以在自己電腦的命令行中輸入:

$ crontab -l 

這個命令, 然後你應該會看到類似的輸出:

crontab: no crontab for xxx

這個命令是用於列出你電腦上已有的計劃任務,因爲我們現在還沒有指定任何計劃任務,所以這個輸出就像上面那樣,告訴我們沒有計劃任務。 如果想添加自己的計劃任務,可以輸入這個命令:

$ crontab -e

這個命令會用 vi 打開一個命令行編輯器,你可以在這裏編輯計劃任務的描述。 crontab 描述文件中每一行代表一個任務,每一行的格式如下:

* * * * * rm /home/someuser/tmp/*

前面 5 個星號代表時間設置,從左到右每個星號的位置分別對應

分鐘(0-59)
小時(0-23)
每月中的天(1-31)
每年中的月(1-12)
每週中的星期幾(0-6) 0 代表星期日

每個星號的位置,可以是星號本身,也可以是具體的數字。 如果是星號本身,代表不加限制。 如果是數字,代表指定的時間。 舉幾個例子:

*  *   *  *  *  // 5個都是個星號,代表每分鐘都會執行。 
30 *   *  *  *  // 每到 30分的時候執行一次,也就是每小時執行兩次。
*  18  *  *  *  // 每天的 18 點執行一次。
*  */2 *  *  *  // 每隔 2 小時執行一次, */ 是間隔時段的表示法。

以上是 crontab 時間設置個幾個常用示例, 只要按照我們上述的每隔時間點的規則來使用,幾乎可以滿足我們絕大部分計劃任務的需求。

在時間配置之後, 就是我們要執行的腳本文件,比如我們想在每天早上 8 點的時候清空機器上的臨時文件,就可以這樣配置:

* 8 * * * rm /home/someuser/tmp/*

每天 8點的時候,就會執行後面的 rm 命令, 刪除臨時文件夾中的文件。 後面的這個命令行內容,可以是任何的 Shell 命令,包括 pipe 操作,比如:

* 8 * * * rm /home/update.sh > /var/log/update.log

這個配置會在每天 8 點的時候, 執行一個叫做 update 的腳本, 並將日誌輸出流重定向到 update.log 文件中。 這時我們的命令行界面應該是這樣的:

編輯完成後, 按下 Esc 鍵, 然後輸入 :wq(代表保存並退出,這個是 vi 文本工具的使用方法), 在命令行左下角是下面圖片中的狀態的時候,按下回車鍵:

這樣就保存了我們剛剛編輯的任務列表,我們再輸出 crontab -l 命令,可以看到任務被成功添加了。

這樣就 ok 了。剩下的事情就交給 crontab 來處理了。

結語

crontab 是 Unix 系統中標配的計劃任務工具,它的原理並不複雜,crontab 是一個守護進程,不停的檢測它的任務列表是否符合執行條件,如果符合,就執行任務。這裏跟大家聊的都是 crontab 比較常規的用法,更詳細的文檔,大家可以通過 man crontab 命令自行查看。相信它對大家的日常工作還是比較有幫助的。

更多精彩內容可關注微信公衆號:
swift-cafe

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章