crontab·定時任務使用筆記

自動執行

大部分時候,我們需要定時任務來幫我們自動執行一些操作,比如清理幾個月之前的日誌、項目上線等。

crontab

crontab 提供了非常簡單實用的使用體驗。crontab(crond table) 管理定時任務非常簡單,只需要編輯一個文件就可以了。這個文件裏,每一行都代表:某月某周某日某時某分要執行的任務。
通過 crontab -e 命令直接打開這個文件。

第一次打開時可能會讓你選用什麼編輯器來編輯,命令行裏的編輯器通常與我們日常使用的有很大的不一樣,這裏建議使用 gedit 來編輯,當然如果沒用過 gedit,需要先百度查查其用法(很簡單)

看看配置文件

第一次打開,這個文件裏應該是一堆註釋(井號後面是註釋),用來介紹 crontab。可以直接把他們都刪掉,然後輸入並保存:(注意空格哦)

* * * * * echo hello >> ~/crontab.test

這一行分兩部分,第一部分是前面的五個星,用來表示任務執行的時間,後面再詳細解釋。第二部分是定時被執行的任務:輸出“hello”到家目錄下的 crontab.test 文件(這個文件需要自己手動創建,命名什麼的隨意)。

文件保存後,會立即生效,不需要其他操作

也許唯一的難點在於理解和使用那五顆星。
如果直接解釋這些星星的意義或者使用規則,那肯定是難以理解的,先看看下面這些例子:

10 * * * * echo hello >> ~/crontab.test
# 每個小時的第 10 分鐘執行一次
# 比如 八點十分,九點十分,每天,每月,每週都會執行
10 8 * * * echo hello >> ~/crontab.test
# 每天的八點十分都會執行一次
10 8 1 * * echo hello >> ~/crontab.test
# 每月一號的八點十分執行一次
10 8 1 1 * echo hello >> ~/crontab.test
# 每年的一月一號的八點十分執行一次
10 8 * * 1 echo hello >> ~/crontab.test
# 每週一的八點十分執行一次
實踐出真知

上面是一些實踐,現在我們知道了那些星星的意義:

  • 每一顆代表一個時間單位

注意:第五顆星的取值範圍是 [0, 1, 2, 3, 4, 5, 6],週日是零

另外……

如果我想每兩小時執行一次呢?
10 */2 * * * echo hello >> ~/crontab.test

注意 */2 之間沒有空格

上面的一行代表:零點、兩點、四點、六點……的第十分鐘(比如六點十分)執行一次。也就是能被二整除的小時執行一次

注意:設定每兩小時執行一次的任務時,必須指定分鐘,否則,零點、兩點的每分鐘都會執行一次(一點三點時不會執行)

如果我想特定的幾個時間執行呢?
10 8 1,2,3 * * echo hello >> ~/crontab.test

上面代表:每月的一二三號的八點十分執行一次

日誌

定時任務會自動記錄日誌,存儲在/var/log/cron.log

但是 ubuntu 默認是關閉了這個日誌的,需要進行一下操作:

  • 編輯日誌服務的配置文件:/etc/rsyslog.d/50-default.conf
  • 把 cron 那一行的註釋去掉,並保存退出
  • 重啓日誌服務:sudo service rsyslog restart
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章