Cron 源自希臘語 "chronos"(時間),是 Linux 系統中用於自動執行排程任務的守護進程。無論是每日備份資料庫、定時清理日誌,還是週期性發送報表,Cron 都能輕鬆勝任。本文將從服務管理、配置語法到實戰範例,帶你全面掌握 Crontab 的核心用法。
Cron 為 Linux 內建服務,但預設不會開機自啟。常用管理指令如下:
/sbin/service crond start # 啟動服務 /sbin/service crond stop # 停止服務 /sbin/service crond restart # 重啟服務 /sbin/service crond reload # 重新載入配置
若需開機自啟,可在 /etc/rc.d/rc.local 中加入啟動指令:
/sbin/service crond start
Cron 將排程任務儲存在 crontab(cron table)檔案中。系統級配置位於 /etc/crontab,使用者級配置則各自存放於 /var/spool/cron/ 目錄下。
export VISUAL='editor' 更換編輯器)Root 身份下可加 -u USERNAME 操作特定使用者的排程,例如 crontab -e -u joey。
注意:Cron 服務每分鐘不僅掃描 /var/spool/cron,也會讀取 /etc/crontab。前者為使用者級任務,後者為系統級任務。
標準 crontab 行包含 7 個欄位(系統級)或 6 個欄位(使用者級):
| 欄位 | 說明 | 範圍/格式 |
|---|---|---|
| 1 | 分鐘 | 0-59 |
| 2 | 小時 | 0-23 |
| 3 | 日期 | 1-31 |
| 4 | 月份 | 1-12 或 Jan、Feb 等縮寫 |
| 5 | 星期 | 0-7(0 與 7 均為週日)或 Sun、Mon 等縮寫 |
| 6 | 使用者名稱(僅系統級) | 執行身份 |
| 7 | 執行指令 | 完整路徑 |
*/2 代表每 2 小時)1-5 代表 1 到 5)1,10,22 代表 1 號、10 號、22 號)# 每天凌晨 03:12 備份 /etc 目錄 12 3 * * * root tar czf /usr/local/backups/daily/etc.tar.gz /etc >> /dev/null 2>&1 # 每月 13 號週一 15:30 執行(數字與英文混用皆可) 30 15 13 6 1 * root tar czf /usr/local/backups/daily/etc.tar.gz /etc >> /dev/null 2>&1 30 15 13 Jun Mon * root tar czf /usr/local/backups/daily/etc.tar.gz /etc >> /dev/null 2>&1 # 以 joey 身份每小時第 15 分鐘執行 15 * * * * joey /usr/bin/somecommand >> /dev/null 2>&1 # 每兩小時執行一次(0, 2, 4... 22 點) 0 */2 * * * joey /usr/bin/somecommand >> /dev/null 2>&1 # 每小時的 15 分與 30 分執行 15,30 * * * * joey /usr/bin/somecommand >> /dev/null 2>&1 # 每月 1-7 號,每兩小時的 15 分與 30 分執行 15,30 */2 1-7 * * joey /usr/bin/somecommand >> /dev/null 2>&1 # 每天 16:18 執行目錄下所有腳本 18 16 * * * root run-parts /home/username/cron >> /dev/null 2>&1
>> /dev/null 2>&1 將標準輸出與標準錯誤均導向 /dev/null(黑洞裝置),避免產生郵件通知。若需保留日誌,可改為:
>> /home/user/somecommand.log 2>&1
crontab -l:查看目前排程crontab -e:編輯排程crontab -r:刪除排程crontab -u USERNAME -e:Root 編輯指定使用者排程/etc/crontab掌握 Crontab,讓伺服器自動處理重複性工作,釋放你的雙手與精力專注於更有價值的事務。