在 Linux 和 UNIX 中,提到「定期處理某項工作」,大家首先會想到的就是 crontab。系統自動執行重複性工作,讓人倍感放心!但如果不懂用,卻會讓人頭痛,因此它同時擁有天使與惡魔的兩面。我將自己在多次與 crontab 奮戰中所領悟的內容分享給大家,包括 crontab 是什麼、怎麼使用以及一些實用的小技巧。

crontab 的本質是什麼?

crontab 簡單來說,是一個在 Linux 和 UNIX 系統中「預定自動、定期執行某些工作的」工具。透過這項設置,我可以輕鬆地處理每天、每週、每月的重複工作。設置完後,它會無腦地為我完成工作,仿佛系統成了我的私人秘書。

讓一切成為可能的正是 cron 守護進程。cron 守護進程會檢查 crontab 檔案中的設定,在指定的時間執行命令,這也是我喜愛使用 crontab 的原因。

我們來了解 crontab 命令吧

crontab 有幾個十分實用的命令。熟悉這些命令後,不僅能節省時間,還能輕鬆檢查和修改設置。

  • crontab -e : 打開 crontab 檔案以添加或修改工作。
  • crontab -l : 顯示當前使用者的 crontab 檔案內容。
  • crontab -r : 刪除當前使用者的 crontab 檔案。(請小心操作)

crontab 檔案的格式是什麼樣的?

crontab 檔案由每個工作一行組成,每行由五個時間欄位和一個命令組成。剛看到這些欄位時,可能會覺得難懂,但一個個看,其實很簡單。

*  *  *  *  * /path/to/command
-  -  -  -  -
|  |  |  |  +----- 星期幾 (0 - 7) (星期日是 0 或 7)
|  |  |  +------- 月份 (1 - 12)
|  |  +--------- 日期 (1 - 31)
|  +----------- 小時 (0 - 23)
+------------- 分鐘 (0 - 59)

每個欄位可以包含數字或 *,而 * 表示所有值。例如,* * * * * 的意思是「每分鐘、每小時、每天、每月、每星期執行」。簡單來說,就是每分鐘都會運行。若能靈活運用,真的可以實現各種排程。

每 5 分鐘執行一次工作的例子

假設有一個命令 */5 * * * * /path/to/myscript.sh。這個設定的意思是每 5 分鐘執行一次名為 myscript.sh 的腳本。

  • */5 : 每 5 分鐘
  • * : 表示所有小時
  • * : 表示所有日期
  • * : 表示所有月份
  • * : 表示所有星期

也就是說,在一天的 24 小時中,每 5 分鐘這個腳本就會執行一次。不需要過多關注,週期性自動運行的設置真是方便!

crontab 使用解釋

各種實用例子

根據不同情況,都可以設置 crontab。讓我們通過幾個例子來了解如何使用。

  1. 每小時執行一次腳本
    0 * * * * /path/to/script.sh
    每到整點的 0 分鐘執行腳本。例如,12:00、13:00、14:00…
  2. 每天凌晨 3 點執行備份任務
    0 3 * * * /path/to/backup.sh
    每天凌晨 3 點執行備份,這樣或許能減少加班的問題。
  3. 每月 1 日和 15 日凌晨 2 點執行
    0 2 1,15 * * /path/to/script.sh
    定期在每月初及中旬執行重要工作也是個好主意。
  4. 僅在週末執行
    30 8 * * 6,7 /path/to/weekend_script.sh
    每週六和週日的早上 8:30 執行腳本的設置。

設置 crontab 時需要注意的事項

在 Linux 中,crontab 任務即使系統重啟後也會保持不變。但有一點需要注意,如果有排定的工作在系統關閉的時間是無法執行的。比方說,如果設置在每天的 3 點執行,但系統在那時關閉,直到 4 點才開啟,那麼當天 3 點的任務就會被跳過。

為了避免這樣的問題,我們可以使用 anacron。anacron 是一個即使系統關閉也會執行「錯過的任務」的工具。由於它可以彌補 crontab 的局限性,當有需要必須定期執行的工作時,使用它非常有用。


如果能好好利用 crontab,對我幫助會非常大。通過時間排程將重要工作自動化,不僅能節省時間,還能減少錯誤。當然,剛開始時可能因為格式問題而感到困難,但一旦熟悉後,就會體會到難以自拔的便利。這篇文章希望能讓大家開始探索 crontab 的世界。