/var/spool/cron/username:用戶級 crontab (由 crontab -e 維護)/etc/crontab:系統級,含 user 欄位/etc/cron.d/:系統級模組化片段 (推薦生產環境)/etc/cron.hourly/daily/weekly/monthly/:run-parts 執行的腳本目錄crontab -l > crontab.bak # 備份 crontab -e # 進入 vim 編輯 # 格式:分 時 日 月 周 命令 10 3 * * 0,6 /path/hello # 週六日 3:10 15 4 * * 4-6 /path/hello # 週四至六 4:15 crontab crontab.bak # 還原/導入
echo "*/1 * * * * root /opt/bin/test-cron.sh" > /etc/cron.d/test-cron # cron daemon 秒級掃描該目錄,無需重啟服務
at -f script.sh -v 10:25 # 今日 10:25 執行一次 atq # 查看隊列 atrm job_id # 刪除任務
systemctl reload crond 或設定較長間隔測試。DISPLAY=:0.0 /path/gui_app 或腳本內 export DISPLAY=:0.0。命令列手動跑通,cron 卻不執行,90% 是 PATH、LD_LIBRARY_PATH、JAVA_HOME 等變數缺失。
鐵律:腳本開頭 source /etc/profile 或顯式 export 所有依賴變數,命令用絕對路徑。
command >/dev/null 2>&1 # 或保留日誌 command >>/var/log/cron_job.log 2>&1
前提:腳本內部已妥善處理正常輸出(寫入專用日誌檔)。
# +---------------- minute (0 - 59) # | +------------- hour (0 - 23) # | | +---------- day of month (1 - 31) # | | | +------- month (1 - 12) # | | | | +---- day of week (0 - 7) (Sun=0 or 7) # | | | | | # * * * * * command
*/15 在 Minute 欄位表示每 15 分鐘,Linux (cronie, systemd-cron) 支援;商業 Unix (AIX, Solaris) 可能不支援,需展開列舉。