技術文章 · IT 指令工具箱

Linux cron、systemd timer 與 macOS launchd 排程檢查指令

整理 crontab、systemd timer、launchctl、plutil 常用查詢與驗證方式,包含環境變數、工作目錄、log、時區與錯過排程後的行為。

作者 Steve Chen · 發布  · 約 5 分鐘閱讀

IT 指令工具箱 — 廷皓技術專欄插圖

排程在互動終端能跑,不代表背景環境也能跑。PATH、工作目錄、權限、時區和輸出位置都要寫清楚,並保留可追查的 log。

19 組範例Linux cronsystemd timermacOS launchd查核日期:2026-08-11
動手前:先用目前帳號手動執行同一條命令,再建立排程。不要把密碼放進 crontab 或 plist;系統級排程與使用者級排程的權限邊界不同。

cron/crontab

列出目前使用者排程Linux/macOS cron

crontab -l

只讀取目前使用者的 crontab。

編輯目前使用者排程Linux/macOS cron

crontab -e

保存前確認編輯器與時區。

先匯出 crontab 備份Linux/macOS cron

crontab -l > crontab-backup.txt

若原本沒有 crontab,結束碼可能非 0。

每天 02:15 執行並寫 logcron

15 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

系統 crontab 和使用者 crontab 欄位數可能不同。

每 10 分鐘執行cron

*/10 * * * * /usr/local/bin/healthcheck.sh

腳本本身應避免重複執行互撞。

用完整 PATHcron

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

放在 crontab 前段,避免互動 shell 的 PATH 差異。

systemd timer

列出所有 timersystemd Linux

systemctl list-timers --all

顯示上次與下次執行時間。

查看單一 timer 狀態systemd Linux

systemctl status backup.timer

timer 與它觸發的 service 是兩個 unit。

查看 timer 定義systemd Linux

systemctl cat backup.timer

同時看 vendor unit 與 drop-in。

查看觸發服務 logsystemd Linux

journalctl -u backup.service -n 100 --no-pager

排程成功不代表工作內容成功,要看 service exit code。

檢查日曆表示式systemd Linux

systemd-analyze calendar 'Mon..Fri 02:15'

會顯示下一次觸發時間。

啟用並立即啟動 timersystemd Linux

sudo systemctl enable --now backup.timer

會改開機行為;先確認 unit 內容。

手動跑一次對應 servicesystemd Linux

sudo systemctl start backup.service

先在維護窗測試,並查看 journal。

macOS launchd

檢查 plist 語法macOS

plutil -lint ~/Library/LaunchAgents/com.example.job.plist

只檢查 plist 格式,不代表命令一定能執行。

列出目前 GUI domain 工作macOS

launchctl print gui/$(id -u)

輸出很多,可再用 grep 找 label。

查看單一 LaunchAgentmacOS

launchctl print gui/$(id -u)/com.example.job

label 必須和 plist 內一致。

載入使用者 LaunchAgentmacOS

launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.example.job.plist

舊版 load 語法已逐步被 bootstrap domain 模型取代。

觸發已載入工作macOS

launchctl kickstart -k gui/$(id -u)/com.example.job

-k 會先終止既有 instance 再啟動,可能影響工作。

卸載使用者 LaunchAgentmacOS

launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.example.job.plist

先確認 label 與路徑,避免卸載錯工作。

怎麼確認有做對

  • 手動執行同一個 executable 與參數。
  • 確認排程器顯示的上次執行時間與 exit status。
  • 檢查輸出 log、產物時間與業務健康檢查。

常見錯誤

  • 依賴互動 shell 的 PATH、alias 或工作目錄。
  • 排程沒有鎖,前一次未結束就重複啟動。
  • 只看 timer/cron 有觸發,沒有看工作 exit code。
  • macOS 混用 system、user、gui domain。

版本與官方文件

參數會隨工具版本與作業系統實作改變。正式環境先用 --help、-h 或系統內建說明確認,再以當版官方文件為準。

聯絡廷皓討論 看更多文章