2025年8月4日 星期一

Linux cron 的基本架構

 在 Linux 中,cron(讀音為 /krɒn/)是一個用於排程自動執行任務的守護程序,常用於定時備份、更新、監控、寄信等自動化任務。這個功能來自 Unix 系統,是 Linux 中最重要的自動排程工具之一。


🔧 一、cron 的基本架構

Linux 的 cron 系統主要由兩部分組成:

  1. crondcron daemon,系統背景程式,負責檢查是否有任務需要執行。

  2. crontab(cron table):使用者定義排程任務的表格。


📄 二、crontab 語法格式

crontab 檔案中的每一行代表一個排程任務,基本格式如下:

bash
# 分 時 日 月 週 指令 * * * * * command_to_run
欄位位置說明範圍
第 1 欄分鐘 (minute)0 - 59
第 2 欄小時 (hour)0 - 23
第 3 欄日 (day)1 - 31
第 4 欄月 (month)1 - 12
第 5 欄星期 (weekday)0 - 7 (0 或 7 代表星期日)
第 6 欄要執行的命令shell command
📌 註:若欄位使用 *,代表「每一個」。

⏱ 三、常見排程範例

crontab 語法說明
0 2 * * * /home/user/backup.sh每天凌晨 2 點執行 backup.sh
*/10 * * * * /usr/bin/python3 script.py每 10 分鐘執行一次 Python 腳本
0 12 * * 1-5 echo "中午到了"每週一到週五中午 12 點顯示訊息
0 0 1 * * logrotate每月 1 號的凌晨執行 logrotate

📂 四、crontab 管理指令

bash
crontab -e # 編輯目前使用者的排程表(使用預設編輯器) crontab -l # 列出目前使用者的排程內容 crontab -r # 刪除目前使用者的所有排程

每個使用者(包含 root)都有自己的 crontab 表


🔒 五、crontab 權限與 log

權限控制檔:

  • /etc/cron.allow

  • /etc/cron.deny

若存在 cron.allow,只有該檔中列出的使用者能使用 cron

執行記錄:

  • /var/log/syslog/var/log/cron(依發行版而異)


📁 六、其他相關目錄

目錄名稱說明
/etc/crontab系統級排程,可設定特定使用者
/etc/cron.d/可額外加入排程的設定檔案
/etc/cron.daily/每日自動執行的腳本目錄
/etc/cron.hourly/每小時執行
/etc/cron.weekly/每週執行
/etc/cron.monthly/每月執行

✅ 七、注意事項

  • 建議指令寫絕對路徑,如 /usr/bin/python3

  • 環境變數與 PATH 可能不同於平時登入 shell。

  • 輸出錯誤可加上:

    bash
    myscript.sh > /tmp/myscript.log 2>&1


若你有具體的排程需求(例如每週清除檔案、自動備份 MySQL、每日寄送報表等),我可以幫你設計具體 crontab 設定範例!

沒有留言:

張貼留言