在 Linux 系統管理中,crontab 是實現自動化排程的核心工具。無論是定時備份、日志輪轉、腳本巡檢,還是系統維護重啟,掌握 crontab 的語法與最佳實踐都是運維人員的必修課。本文系統整理 crontab 的核心概念、指令操作、時間格式詳解與多個實戰範例,助你快速上手。
/var/spool/cron/(以用戶名命名)。/etc/crontab 與 /etc/cron.d/ 目錄,需指定執行用戶欄位。# 查看服務狀態
service crond status
# 啟動/重啟/停止
service crond start|restart|stop
# 設定開機自啟(SysVinit)
chkconfig --level 35 crond on
# systemd 系統
systemctl enable --now crond
| 指令 | 功能 |
|---|---|
crontab -e | 編輯當前用戶排程(啟動編輯器) |
crontab -l | 列出當前用戶排程內容 |
crontab -r | 刪除當前用戶所有排程 |
crontab -u user -e | root 管理其他用戶排程 |
crontab file | 從檔案導入排程表 |
* * * * * command
分 時 日 月 周 命令
(0-59)(0-23)(1-31)(1-12)(0-7) (0或7=週日)
特殊符號:
*:所有合法值,:列舉值,如 1,3,5-:範圍,如 1-5/:步長,如 */10 表示每 10 分鐘;0-23/2 表示每 2 小時# 每天 06:10 執行
10 6 * * * date
# 每 2 小時執行一次
0 */2 * * * /path/to/script.sh
# 每月 4 號及週一至週三 11:00 執行
0 11 4 * mon-wed /backup.sh
# 每分鐘執行(測試用)
* * * * * /root/run_sh/run.sh
建議將複雜邏輯寫入 Shell 腳本,crontab 僅調用腳本:
# /root/run_sh/run.sh
#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
cd /root/javaExe/
java TestCron/Test >> /var/log/testcron.log 2>&1
關鍵提醒:
export 環境變量,cron 環境極簡;>> /var/log/xxx.log 2>&1。# 每天 05:30 重啟系統
30 5 * * * root /sbin/reboot
# 每天 21:30 重啟 lighttpd
30 21 * * * root /usr/local/etc/rc.d/lighttpd restart
timedatectl 與硬體時鐘同步。grep CRON /var/log/syslog 或 /var/log/cron。
掌握 crontab 精髓在於「理解時間格式、善用腳本封裝、重視環境變量隔離」。將本文收藏備查,定時任務配置將不再是難題。