Linux crontab 可用固定時間格式執行週期性任務,例如每天備份、每 10 分鐘檢查服務或每月產生報表。設定時最重要的是看懂五個時間欄位,並確認任務使用絕對路徑與正確環境變數。
如何查看與編輯 crontab?
crontab 的常用操作包含查看、編輯與刪除。一般使用者可管理自己的 crontab,具 sudo 權限者也可查看或編輯指定使用者的 crontab。
查看自己的 crontab:
```bash
crontab -l
```
查看指定使用者的 crontab:
```bash
sudo crontab -u gtwang -l
```
編輯自己的 crontab:
```bash
crontab -e
```
編輯指定使用者的 crontab:
```bash
sudo crontab -u gtwang -e
```
刪除自己的 crontab:
```bash
crontab -r
```
刪除前建議先用 `crontab -l > backup.cron` 備份,因為 `crontab -r` 不會逐項詢問。
crontab 時間格式怎麼看?
crontab 使用五個時間欄位,依序代表分鐘、小時、日期、月份與星期。每一列後方接要執行的 command。
格式如下:
```text
```
在使用者自己的 crontab 中,通常不需要寫 `user-name` 欄位;`/etc/crontab` 這類系統層級檔案才常見 user 欄位。
crontab 常用範例有哪些?
crontab 範例最好從需求句子反推時間欄位。先寫出「每天幾點」、「每週幾」、「每隔多久」,再填入五欄格式。
```bash
30 08 * /home/gtwang/script.sh --your --parameter
30 18 0 yourcommand
30 18 Sun yourcommand
30 08 10 06 * yourcommand
30 21 1,15,29 yourcommand
/10 * yourcommand
00 09-18 * yourcommand
```
資訊增益:crontab 裡的 command 建議使用絕對路徑,例如 `/usr/bin/node /app/job.js`。cron 的環境變數比登入 shell 少,很多「手動執行會過、排程不會過」都和 PATH 不同有關。
crontab 特殊字元代表什麼?
crontab 特殊字元用來表達任意時間、多個值、區間與間隔。看懂 `*`、`,`、`-`、`/` 就能處理多數排程。
| 特殊字元 | 代表意義 | 範例 |
|---|---|---|
| `*` | 任意值 | ` *` 每分鐘 |
| `,` | 多個指定值 | `0 3,6,9 *` 每天 3、6、9 點 |
| `-` | 一段區間 | `0 8-12 *` 8 點到 12 點整點 |
| `/n` | 每隔 n 單位 | `/5 *` 每 5 分鐘 |
如果排程牽涉時區,應確認 server timezone。容器環境、雲端主機與本機開發機的時區可能不同。
crontab 任務如何避免常見錯誤?
crontab 任務最常失敗在路徑、權限、環境變數與輸出未記錄。每個排程都應該能被手動執行,並把 stdout、stderr 寫入 log。
建議寫法:
```bash
/10 * /usr/bin/bash /opt/jobs/check.sh >> /var/log/check-job.log 2>&1
```
檢查表:
| 檢查項目 | 建議 |
|---|---|
| command 路徑 | 使用絕對路徑 |
| shell | 明確指定 bash 或 sh |
| log | 將 stdout/stderr 寫到檔案 |
| 權限 | 確認執行使用者可讀寫目標 |
| 重複執行 | 長任務需加 lock 避免疊在一起 |
若排程任務可能執行超過間隔時間,應加 lock file 或使用 systemd timer、任務佇列等更可控的機制。
常見問題
crontab 的星期 0 是星期幾?
多數 cron 實作中,星期 0 或 7 都代表星期日。也可使用 `Sun` 讓設定較易讀。
`crontab -e` 和 `/etc/crontab` 有什麼不同?
`crontab -e` 編輯目前使用者的排程,通常不寫 user 欄位。`/etc/crontab` 是系統層級排程,常會多一欄指定執行使用者。
為什麼 crontab 手動執行可以、排程執行失敗?
最常見原因是 PATH、工作目錄、環境變數或權限不同。排程 command 應使用絕對路徑並寫 log。
每 10 分鐘執行一次怎麼寫?
可寫成 `/10 * yourcommand`。這代表每個小時的 0、10、20、30、40、50 分執行。
crontab 適合跑所有背景任務嗎?
不一定。簡單週期任務適合 crontab;需要重試、佇列、依賴關係或監控告警的任務,應考慮 systemd timer、任務佇列或工作流系統。
參考資料
- man7.org:crontab(5)
- Ubuntu Documentation:CronHowto
- Debian Manpages:crontab
最後更新
本文最後更新於 2026-08-27。原文發布於 2020-03-26,本文補上使用者 crontab 與系統 crontab 差異,以及排程除錯檢查表。
延伸閱讀
關於作者 {#author}
Claire Chang | 企業 AI 導入與流程轉型顧問。專注於 AI Agent 架構設計、ERP 系統整合與企業 AI 治理。
首次發布:2020-03-26
