Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 定時任務 Cron 完整實戰指南:系統級 /etc/cron.*、使用者級 crontab、排程語法與除錯技巧

編輯:Linux 教學

Cron 是 Linux 內建的時間基礎作業排程器。本文系統梳理系統級目錄 /etc/cron.*、使用者級 crontab 指令、時間排程語法、實戰 Demo 與常見除錯陷阱。

系統級排程:/etc/cron.* 目錄結構

ls /etc/cron*
/etc/cron.hourly   # 每小時執行 (第 17 分)
/etc/cron.daily    # 每天執行 (06:25)
/etc/cron.weekly   # 每週執行 (週日 06:47)
/etc/cron.monthly  # 每月執行 (1 號 06:52)
/etc/cron.d        # 自定義頻率 (腳本檔)

驅動邏輯在 /etc/crontab:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
  • 將可執行腳本丟入對應目錄,**無需編輯 crontab**
  • run-parts 依字典序執行目錄下所有可執行檔
  • anacron 確保關機錯過的排程在開機後補跑

Cron 服務管理

service cron start|stop|restart|reload
systemctl start|enable cron   # systemd 系統

使用者級排程:crontab 指令

指令功能
crontab -e編輯當前使用者排程 (建立 /var/spool/cron/username)
crontab -l列出排程內容
crontab -r刪除所有排程
crontab -u user -eroot 編輯指定使用者排程

排程時間語法 (5 欄位 + 指令)

* * * * *  指令
分 時 日 月 週
0-59 0-23 1-31 1-12 0-7 (0/7=週日)

特殊符號

符號含義範例
*所有合法值* * * * * 每分鐘
/步長*/5 * * * * 每 5 分鐘
-範圍8-18 * * * 8-18 點
,離散列舉1,15,30 * * * * 第 1/15/30 分

常用範例速查

*/1 * * * *  /path/script.sh          # 每分鐘
0 * * * *    /path/script.sh          # 每小時整點
0 0 * * *    /path/script.sh          # 每天午夜
0 0 * * 0    /path/script.sh          # 每週日午夜
0 0 1 * *    /path/script.sh          # 每月 1 號午夜
0 0 1 1 *    /path/script.sh          # 每年 1/1 午夜
0 6 * * *    /path/script.sh          # 每天 06:00
0 */2 * * *  /path/script.sh          # 每 2 小時
0 23-7/2 * * * /path/script.sh       # 23:00-07:00 每 2 小時
0 4 1 1 *    /path/script.sh          # 1/1 04:00

實戰 Demo:每分鐘記錄網址到日誌

  1. 建立腳本 backupDemo.sh:
    #!/bin/bash
    VAR="https://www.example.com"
    echo "$(date) $VAR"
    exit 0
  2. 授權:chmod +x backupDemo.sh
  3. 編輯排程:crontab -e
    */1 * * * * /home/user/backupDemo.sh >> /home/user/log.log 2>&1
  4. 驗證:tail -f /home/user/log.log

除錯三板斧

  1. 檢查 Cron 是否運行:systemctl status cron / ps aux | grep cron
  2. 查看系統日誌:grep CRON /var/log/syslog (Debian/Ubuntu) 或 /var/log/cron (RHEL/CentOS)
  3. 測試指令本身:手動執行腳本確認無誤,再交給 Cron。注意環境變數差異 (Cron 不載入 ~/.bashrc),腳本內**務必使用絕對路徑**或開頭 source /etc/profile。

進階技巧

  • @reboot 開機自動執行一次
  • MAILTO="" 關閉郵件通知 (預設寄給擁有者)
  • SHELL=/bin/bash 指定解釋器
  • 系統級 /etc/cron.d/ 檔案需包含使用者欄位:* * * * * user command

Cron 簡單可靠,但「環境變數缺失、相對路徑、輸出無處可查」是三大坑。寫排程前先手動跑通、加絕對路徑、導向日誌,穩如磐石。

Copyright © Windows教程網 All Rights Reserved