---
# System prepended metadata

title: Crontab 詳細介紹（Linux/Ubuntu 定時任務）
tags: [Ubuntu]

---

# 🗓️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 🛠️。