# 🗓️Crontab 詳細介紹(Linux/Ubuntu 定時任務) ### crontab 是 Linux 內建的 定時任務調度工具,允許用戶 自動執行腳本、命令或程序。它可用來安排重啟服務、備份數據、監控系統狀態等。 #### ✅ 自動備份 📂 #### ✅ 發送通知 📩 #### ✅ 清理日誌 🗑️ ## 1️⃣ crontab 的基本用法 #### crontab 允許每個用戶設置自己的定時任務。主要指令如下: | **指令** | **用途** | |----------------------|------------------------------------------------| | `crontab -e` | 編輯當前用戶的 `crontab` 任務 | | `crontab -l` | 查看當前用戶的 `crontab` 任務 | | `crontab -r` | 刪除當前用戶的 `crontab` 任務 | | `crontab -i -r` | **安全刪除 `crontab`**(會詢問是否確認刪除)| | `sudo crontab -e` | **編輯 `root` 用戶的 `crontab`**(系統層級任務)| | `sudo crontab -l` | 查看 `root` 用戶的 `crontab` 任務| | `sudo crontab -r` | 刪除 `root` 用戶的 `crontab` 任務| Example: ### 📌 Crontab 基礎語法 ### Crontab 每條指令包含 6 個欄位,分別代表不同的時間單位: ``` * * * * * * // 分鐘 小時 日期 月份 星期 指令 ``` |**欄位**|**允許值**|**說明**| |--------|---------|------------| |🕑 分鐘 (m)|0-59|代表小時內的第幾分鐘| |⏰ 小時 (h)|0-23|代表一天內的第幾小時| |📅 日期 (dom)| 1-31|代表月份中的哪一天| |📆 月份 (mon)|1-12|代表月份(1=一月, 2=二月, …)| |📊 星期 (dow)|0-7|代表星期幾(0 和 7 都是星期日)| |💻 指令 (command)| 任意合法指令 |欲執行的 Shell 命令或腳本| 📌 範例 ``` 30 3 * * * /path/to/script.sh ``` ### 🔹 每天凌晨 3:30 執行 /path/to/script.sh。 ## 2️⃣ 特殊符號 🎯 |**符號**|**說明**| |-|-| |`*`|代表「任意值」,如 * * * * * 表示「每分鐘執行一次」⏳| |`,`|代表「多個指定值」,如 1,5,10 * * * * 表示「每小時的第 1、5、10 分鐘執行」 ⏱️| |`-`|代表「範圍」,如 1-5 * * * * 表示「每小時的第 1 到 5 分鐘執行」 📊| |`/`|代表「間隔時間」,如 */10 * * * * 表示「每 10 分鐘執行一次」 🔄 | |`@reboot`|在系統開機時執行一次 🔧| ## 3️⃣ Crontab 指令 🛠️ ### 📋 列出當前使用者的 Crontab `crontab -l` ### ✏️ 編輯 Crontab 任務 `crontab -e` 預設會打開 vim 或 nano 編輯器來修改 Crontab。 ### 🗑️ 刪除當前使用者的 Crontab `crontab -r` ### 👤 編輯或查看特定使用者的 Crontab (需要 root 權限) ``` crontab -u 使用者名 -l # 查看某個使用者的 crontab crontab -u 使用者名 -e # 編輯某個使用者的 crontab ``` ## 4️⃣ 常見 Crontab 任務範例 ✅ ### ⏳ 每分鐘執行一次 ``` * * * * * echo "Hello World" >> /tmp/hello.log ``` ##### 📌 每分鐘執行 echo "Hello World",並將輸出追加到 /tmp/hello.log。 ### 🌙 每天凌晨 3:30 執行 ``` 30 3 * * * /path/to/script.sh ``` ### 🏢 每週一到五早上 9 點執行 ``` 0 9 * * 1-5 /path/to/command ``` ### 🔄 每 10 分鐘執行一次 ``` */10 * * * * /path/to/script.sh ``` ### 📅 每月 1 號 12:00 執行 ``` 0 12 1 * * /path/to/script.sh ``` ### 🔧 開機時執行 ``` @reboot /path/to/script.sh ``` ## 5️⃣ Crontab 輸出與錯誤處理 ⚠️ #### 📂 記錄輸出到日誌檔 ``` * * * * * /path/to/script.sh >> /var/log/script.log 2>&1 ``` * #### ``>>``:追加輸出到 script.log 📜。 * #### `2>&1`:將錯誤輸出 (stderr) 也寫入日誌 🚨。 #### 🔕 禁止輸出 ```* * * * * /path/to/script.sh > /dev/null 2>&1``` * #### 避免產生過多日誌 📑。 ## 📌 結論 ### ✅ Crontab 是管理定時任務的強大工具,適合定期執行腳本或命令 ⏰。 ### ✅ 若需開機啟動,建議使用 systemd 來替代 @reboot 🏆。 ### ✅ 確保腳本能獨立執行,避免 cron 環境變數問題 ⚙️。 ### ✅ 善用 >> 記錄日誌,方便 Debug 🛠️。