類別:系統及安全性
| 發布於 2025-06-24 20:17
Linux crontab 系統排程
系統排程簡介
cron 是 Linux/Unix 系統中用來設定排程工作的工具,可以定期執行腳本或指令。排程分為:
- 使用者排程:由各自使用者設定自己的排程工作。
- 系統排程:設定在
/etc/crontab 或其他自動載入的檔案中,通常由
root 或管理員設定。
crontab 指令
系統排程範例
欄位說明:
| 欄位 |
意義 |
| 分(Minute) |
0 - 59 |
| 時(Hour) |
0 - 23 |
| 日(Day of Month) |
1 - 31 |
| 月(Month) |
1 - 12 或 jan,feb,… |
| 星期(Day of Week) |
0 - 7(0 和 7 都代表星期日),或 sun,mon,… |
| 使用者(User) |
系統排程才需要,代表以哪個身份執行指令 |
| 指令(Command) |
欲執行的指令或腳本 |
範例說明:
- 每月 1 號 02:00,以
root 身份執行 /opt/bin/system-check
- 每年 2 月 29 號 00:00,以
root 身份執行
/opt/bin/system-check
- 每週六日(6, 7)02:30,以
sysop 身份執行
/opt/bin/full-backup
特殊符號:
/:間隔執行,例如 */3 * * * * 表示每 3 分鐘執行一次
,:列舉多個值,例如 6,7 表示星期六與星期日
-:範圍,例如 1-5 表示星期一到星期五
*:通配任意值
使用者排程與系統排程的差異
| 項目 |
使用者排程 |
系統排程 |
| 檔案位置 |
crontab -e 編輯的個人排程(儲存於
/var/spool/cron/) |
/etc/crontab 或 /etc/cron.d/ |
| 欄位數 |
5 個(無使用者欄位) |
6 個(包含使用者欄位) |
| 權限限制 |
僅能編輯自己的排程 |
需有 sudo 權限可編輯系統排程 |
排程記錄
排程工作無論成功或失敗都會被記錄到系統日誌中,可透過以下指令檢查:
系統時間與排程不同步的處理方式
若排程執行時間與預期不符,可能為時區設定問題,處理步驟如下:
若問題仍未解決,可重新啟動 rsyslog 服務來確保 log 正常記錄:
確認是否已正確記錄排程執行:
Linux crontab 系統排程
系統排程簡介
cron是 Linux/Unix 系統中用來設定排程工作的工具,可以定期執行腳本或指令。排程分為:/etc/crontab或其他自動載入的檔案中,通常由root或管理員設定。crontab 指令
# 列出目前使用者的排程工作 crontab -l # 編輯目前使用者的排程工作 crontab -e系統排程範例
# 查看系統排程 sudo cat /etc/crontabSHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # 分 時 日 月 星期 使用者 指令 0 2 1 * * root /opt/bin/system-check 0 0 29 2 * root /opt/bin/system-check 30 2 * * 6,7 sysop /opt/bin/full-backup欄位說明:
範例說明:
root身份執行/opt/bin/system-checkroot身份執行/opt/bin/system-checksysop身份執行/opt/bin/full-backup特殊符號:
/:間隔執行,例如*/3 * * * *表示每 3 分鐘執行一次,:列舉多個值,例如6,7表示星期六與星期日-:範圍,例如1-5表示星期一到星期五*:通配任意值使用者排程與系統排程的差異
crontab -e編輯的個人排程(儲存於/var/spool/cron/)/etc/crontab或/etc/cron.d/sudo權限可編輯系統排程排程記錄
排程工作無論成功或失敗都會被記錄到系統日誌中,可透過以下指令檢查:
# 查看 cron 執行紀錄(依發行版而異) sudo tail /var/log/cron # CentOS/RHEL sudo tail /var/log/syslog | grep CRON # Ubuntu/Debian系統時間與排程不同步的處理方式
若排程執行時間與預期不符,可能為時區設定問題,處理步驟如下:
# 變更時區(以台灣為例) sudo timedatectl set-timezone Asia/Taipei # 重新啟動 cron 服務 sudo systemctl restart cron若問題仍未解決,可重新啟動 rsyslog 服務來確保 log 正常記錄:
確認是否已正確記錄排程執行:
sudo tail /var/log/syslog | grep CRON