熱門分類
載入中…
目錄0%

🐧 Linux Crontab 與系統排程完整教學:cron / systemd-timer 實務指南

    🐧 Linux Crontab 與系統排程完整教學:cron / systemd-timer 實務指南

    Linux 的排程系統是所有伺服器管理、備份、自動化流程的重要基礎。 本篇將完整介紹 crontab、cron daemon、systemd timer,並提供實務範例, 協助你規劃從每日備份、服務健康檢查,到自動清理 log 等各種任務。

    📌 一、Cron 與 Crontab 概念總覽

    Cron 是 Linux 內建的排程系統,負責定期執行任務;而 Crontab 則是使用者可編輯的排程表。

    • cron:常駐服務,負責讀取排程。
    • crontab:排程設定所在。
    • 位置包含:
      • /etc/crontab
      • /etc/cron.d//etc/cron.hourly/
      • crontab -e(使用者排程)

    📝 二、Crontab 格式說明(5 欄與 6 欄)

    標準 Crontab 使用 5 欄格式:

    # 分   時   日   月   星期
    *     *    *    *     *     指令
    
    欄位範例說明
    0–59第幾分鐘執行
    0–2324 小時制
    1–31一個月中的第幾天
    1–12月份
    星期0–70/7=星期日

    ✔ 常用符號

    *     代表所有可能值  
    ,     多個值,例如 1,3,5  
    -     範圍,如 1-5  
    /     每隔,例如 */10 = 每 10 分鐘
    

    📘 三、Crontab 實務範例

    1️⃣ 每天 02:00 自動備份資料

    0 2 * * * /usr/local/bin/backup.sh
    

    2️⃣ 每 10 分鐘執行健康檢查

    */10 * * * * /usr/bin/systemctl is-active nginx >> /var/log/nginx_health.log
    

    3️⃣ 每週一凌晨清除 7 天前的日誌

    0 3 * * 1 find /var/log -type f -mtime +7 -delete
    

    📌 查看 Cron 執行結果

    journalctl -u cron
    # 或
    grep CRON /var/log/syslog
    

    🧩 四、Systemd Timer:更現代、更穩定的排程方式

    在 modern Linux (CentOS 7+、RHEL、Ubuntu 18.04+) 中,更建議使用 systemd timer, 因為它具備更完善的 Log、依賴性、啟動控制與觸發模型。

    🔥 五、建立 Systemd Service + Timer(完整範例)

    1️⃣ 建立 Service

    # /etc/systemd/system/cleanup.service
    [Unit]
    Description=Cleanup old logs
    
    [Service]
    Type=oneshot
    ExecStart=/usr/local/bin/cleanup.sh
    

    2️⃣ 建立 Timer

    # /etc/systemd/system/cleanup.timer
    [Unit]
    Description=Run cleanup job daily
    
    [Timer]
    OnCalendar=daily
    Persistent=true
    
    [Install]
    WantedBy=timers.target
    

    3️⃣ 啟用排程

    systemctl daemon-reload
    systemctl enable --now cleanup.timer
    systemctl status cleanup.timer
    

    📌 查看執行紀錄(比 cron 更完整)

    journalctl -u cleanup.service
    systemctl list-timers
    

    ⚖️ 六、Cron vs Systemd Timer 比較

    項目CronSystemd Timer
    Log需查 syslogjournalctl 支援完善
    穩定度基本強,可設定依賴、重啟策略
    複雜任務較難管理適合大型任務
    系統整合高(完全 systemd 整合)

    建議:新系統優先用 systemd timer。

    🔧 七、常見排查問題

    1️⃣ Cron 沒有執行?

    systemctl status cron
    crontab -l
    grep CRON /var/log/syslog
    

    2️⃣ 指令不能執行?多半是 PATH 問題

    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
    # 建議寫在 crontab 文件開頭
    

    3️⃣ systemd timer 未觸發?

    systemctl status yourjob.timer
    systemctl list-timers
    journalctl -u yourjob.service
    

    📘 結語

    不論是 Cron 還是 Systemd Timer 都是 Linux 自動化的核心能力。 Cron 適合簡單、快速的任務;Systemd Timer 則適合更現代、可控、可觀察的大型排程。 建議在新環境全面導入 systemd timer,以提升可維護性與穩定度。


    🔗 延伸閱讀

    — WWFandy・系統自動化筆記

    🔗 分享這篇 LINE Facebook X

    沒有留言:

    字級