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 定時任務 Crontab 完整使用指南:從入門到實戰

編輯:關於 Linux

Crontab 是 Linux 系統排程任務的核心工具,支援分鐘級精度的週期性命令執行。本文系統講解 Crontab 語法、編輯操作、服務管理、實戰範例與常見坑點,助你精準掌控自動化任務。

核心概念

  • 每位使用者擁有獨立的 Crontab 表(儲存在 /var/spool/cron/)。
  • cron 守護進程每分鐘掃描一次,匹配時間條件則執行對應命令。
  • 系統級定時任務另存於 /etc/crontab 與 /etc/cron.d/,格式略有不同(多一個使用者欄位)。

基本操作命令

命令功能
crontab -e編輯當前使用者定時任務(建立專屬編輯器環境)
crontab -l列出當前使用者定時任務
crontab -r刪除當前使用者所有定時任務(慎用)
crontab -u user -eroot 編輯指定使用者任務

時間表達式語法

* * * * *  執行命令
- - - - -
| | | | └─ 星期幾 (0-7) (0或7=星期日)
| | | └──── 月份 (1-12)
| | └────── 日期 (1-31)
| └──────── 小時 (0-23)
└────────── 分鐘 (0-59)

特殊符號

  • *:任意值
  • ,:列舉值(如 1,15 表示 1 號和 15 號)
  • -:範圍(如 1-5 表示 1 到 5)
  • /:步長(如 */10 表示每 10 分鐘,2-10/2 表示 2-10 每 2)

實戰範例集

需求Crontab 條目說明
每分鐘執行* * * * * /path/to/script.sh測試用,生產慎用
每小時第 5 分鐘5 * * * * /path/to/script.sh
每天 02:30 備份30 2 * * * /backup.sh >> /var/log/backup.log 2>&1重導向輸出到日誌
工作日 09:00 發報表0 9 * * 1-5 /report.sh1-5 為週一至週五
每月 1 號 00:00 清理日誌0 0 1 * * /cleanup.sh
每 10 分鐘檢查服務*/10 * * * * /check_service.sh高頻監控
每年 12/31 23:59 年終處理59 23 31 12 * /year_end.sh

腳本執行最佳實踐

  1. 使用絕對路徑: 命令、腳本、日誌檔全部用絕對路徑(/root/scripts/backup.sh),避免 PATH 環境變數差異導致找不到命令。
  2. Shebang 必備: 腳本首行 #!/bin/bash 指定解釋器。
  3. 執行權限: chmod +x /path/to/script.sh。
  4. 環境變數載入: 腳本開頭 source /etc/profile 或 source ~/.bashrc 確保環境一致。
  5. 輸出重導向: > /var/log/mylog.log 2>&1 捕獲標準輸出與錯誤,防止郵件堆積。
  6. 鎖機制防重入: 關鍵任務使用 flock 或 PID 檔防止並發執行。

服務管理

# 檢查狀態
systemctl status cron    # systemd 系統
service cron status      # SysVinit 系統

# 重啟服務(修改 crontab 後通常無需重啟,cron 會自動重讀)
systemctl restart cron

常見坑點與排查

現象原因解決
任務不執行命令路徑錯誤/無執行權限/環境變數缺失用絕對路徑、加 Shebang、source profile
執行時間不準系統時間/時區錯誤timedatectl set-timezone Asia/Taipei
日誌無輸出重導向語法錯誤/權限不足> /path/log 2>&1、確認目錄可寫
重複執行腳本執行時間超過間隔/無鎖機制加 flock -n /tmp/mylock -c "cmd"
特殊字元失效% 在 crontab 有特殊含義(換行)用 \% 轉義或寫入腳本檔

系統級定時任務 /etc/crontab 格式差異

# /etc/crontab: 多一個 USER 欄位
* * * * *  root  /usr/local/bin/system_task.sh

此外 /etc/cron.d/ 目錄下每個檔案同此格式,便於套件管理與版本控制。

進階:systemd Timers 替代方案

現代系統(systemd)推薦使用 .timer + .service 替代 Crontab,優勢:

  • 精確到秒級、支援單調時鐘、隨機延遲(RandomizedDelaySec)。
  • 統一由 systemd 管理,支援依賴關係、日誌整合(journalctl -u myservice)。
  • 可透過 systemctl list-timers 統一查看。

熟練掌握 Crontab 並了解 systemd Timers,即可構建健壯、可維運的 Linux 自動化任務體系。

Copyright © Windows教程網 All Rights Reserved