Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux 定時任務 (crontab) 避坑指南:環境變量、生效延遲、日誌排查

編輯:Linux 系統常見問題解答

核心注意事項

1. 新建任務不會立即執行

  • 至少等待 2 分鐘 cron daemon 才會掃描到新增的 crontab。
  • 需立即生效可重啟 cron 服務:systemctl restart cron (或 service cron restart)。

2. 環境變量是「隱形殺手」

現象:腳本手動運行正常,crontab 定時不執行/報錯。

原因:cron 執行環境極度精簡,不繼承用戶的 PATH、HOME、LANG 等變量,僅保留极少內建變量(SHELL=/bin/sh, LOGNAME, HOME, PATH=/usr/bin:/bin)。

解決方案(三選一):

  1. 腳本內聲明完整路徑:所有命令、文件路徑使用絕對路徑(如 /usr/bin/python3 /opt/scripts/backup.py)。
  2. 腳本開頭 source 環境:
    #!/bin/bash
    source /etc/profile
    source ~/.bash_profile
  3. crontab 文件頭定義變量:
    SHELL=/bin/bash
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    HOME=/root
    LANG=zh_CN.UTF-8

    0 2 * * * /opt/scripts/backup.sh

3. 標準輸出/錯誤必須重定向

否則輸出會郵件發送給用戶(若未配置郵件系統則丟失),導致無法排查。

# 正確寫法:記錄日誌並捕獲錯誤
0 2 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1

4. 百分號 (%) 在 crontab 中有特殊含義

會被解析為換行符,需轉義 \%:

# 錯誤
* * * * * echo "100%" 
# 正確
* * * * * echo "100\%"

快速驗證清單

  • ☑ crontab -l 確認語法正確(無語法錯誤行)。
  • ☑ tail -f /var/log/syslog | grep CRON 觀察 cron 執行記錄。
  • ☑ 腳本有執行權限:chmod +x /path/script.sh。
  • ☑ Shebang 行正確:#!/bin/bash(而非 #!/bin/sh,除非腳本兼容 POSIX sh)。
  • ☑ 使用 run-parts --test /etc/cron.daily 測試腳本可被 cron 執行器識別。

系統級 vs 用戶級 crontab

類型編輯命令存儲位置執行身份適用場景
用戶級crontab -e/var/spool/cron/username該用戶應用備份、同步腳本
系統級vim /etc/crontab/etc/crontab、/etc/cron.d/指定用戶欄位系統維護、日誌輪轉、套件更新

系統級 crontab 多一個「用戶」欄位:分 時 日 月 週 用戶 命令。

Copyright © Windows教程網 All Rights Reserved