在 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
。讓我們通過幾個例子來了解如何使用。
- 每小時執行一次腳本
0 * * * * /path/to/script.sh
每到整點的 0 分鐘執行腳本。例如,12:00、13:00、14:00… - 每天凌晨 3 點執行備份任務
0 3 * * * /path/to/backup.sh
每天凌晨 3 點執行備份,這樣或許能減少加班的問題。 - 每月 1 日和 15 日凌晨 2 點執行
0 2 1,15 * * /path/to/script.sh
定期在每月初及中旬執行重要工作也是個好主意。 - 僅在週末執行
30 8 * * 6,7 /path/to/weekend_script.sh
每週六和週日的早上 8:30 執行腳本的設置。
設置 crontab 時需要注意的事項
在 Linux 中,crontab
任務即使系統重啟後也會保持不變。但有一點需要注意,如果有排定的工作在系統關閉的時間是無法執行的。比方說,如果設置在每天的 3 點執行,但系統在那時關閉,直到 4 點才開啟,那麼當天 3 點的任務就會被跳過。
為了避免這樣的問題,我們可以使用 anacron。anacron 是一個即使系統關閉也會執行「錯過的任務」的工具。由於它可以彌補 crontab
的局限性,當有需要必須定期執行的工作時,使用它非常有用。
如果能好好利用 crontab
,對我幫助會非常大。通過時間排程將重要工作自動化,不僅能節省時間,還能減少錯誤。當然,剛開始時可能因為格式問題而感到困難,但一旦熟悉後,就會體會到難以自拔的便利。這篇文章希望能讓大家開始探索 crontab
的世界。
Add a New Comment