systemctl restart cron (或 service cron restart)。現象:腳本手動運行正常,crontab 定時不執行/報錯。
原因:cron 執行環境極度精簡,不繼承用戶的 PATH、HOME、LANG 等變量,僅保留极少內建變量(SHELL=/bin/sh, LOGNAME, HOME, PATH=/usr/bin:/bin)。
解決方案(三選一):
/usr/bin/python3 /opt/scripts/backup.py)。#!/bin/bash
source /etc/profile
source ~/.bash_profileSHELL=/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否則輸出會郵件發送給用戶(若未配置郵件系統則丟失),導致無法排查。
# 正確寫法:記錄日誌並捕獲錯誤
0 2 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1
會被解析為換行符,需轉義 \%:
# 錯誤
* * * * * echo "100%"
# 正確
* * * * * echo "100\%"
crontab -l 確認語法正確(無語法錯誤行)。tail -f /var/log/syslog | grep CRON 觀察 cron 執行記錄。chmod +x /path/script.sh。#!/bin/bash(而非 #!/bin/sh,除非腳本兼容 POSIX sh)。run-parts --test /etc/cron.daily 測試腳本可被 cron 執行器識別。| 類型 | 編輯命令 | 存儲位置 | 執行身份 | 適用場景 |
|---|---|---|---|---|
| 用戶級 | crontab -e | /var/spool/cron/username | 該用戶 | 應用備份、同步腳本 |
| 系統級 | vim /etc/crontab | /etc/crontab、/etc/cron.d/ | 指定用戶欄位 | 系統維護、日誌輪轉、套件更新 |
系統級 crontab 多一個「用戶」欄位:分 時 日 月 週 用戶 命令。
CentOS/RHEL iptables 防火牆管理全攻略:開放端口、保存規則、永久關閉、配置文件詳解
VMware Workstation Windows 主機與 Linux 虛擬機共享文件夾完整配置指南
Linux 目錄處理核心命令 ls 完全指南:參數詳解、輸出解讀與實戰技巧
Ubuntu Vim 從安裝到精通:基礎操作、ctags 程式碼導航、插件管理與 .vimrc 最佳實踐
ITDB 整合 LDAP 導入用戶實戰:自動同步、權限映射與 Init.php 擴展
Linux 資源限制完整指南:系統級、應用級與核心級三層架構詳解