若要在 Linux 中列出 cron 排程工作,請執行 crontab -l 以列印目前使用者的每一行排程,使用 sudo crontab -l -u username 檢查其他使用者的 crontab,並讀取 /etc/crontab、/etc/cron.d/ 以及 /etc/cron.{hourly,daily,weekly,monthly} drop-in 目錄來查看全系統的排程。每行輸出是一個五欄位的 cron 運算式,後面接著一個 shell 指令,檔案頂端也可能包含 MAILTO、PATH 和 SHELL 等環境變數設定。cron 守護行程會每分鐘讀取這些項目,並執行運算式符合排程主機目前本地時間的每個指令。由於運算式本身只編碼了時間點,因此列出工作往往是您發現欄位遺漏、星期數字錯誤,或某個月份不存在的日期的時刻。當您需要新增或取代工作時,手動建立五欄位運算式容易出錯,因此一個能將易讀排程對應到正確欄位順序的產生器,是保持正確的最快方式。

how to get cron job list in linux
如何在 Linux 中取得 Cron 工作清單

列出 Cron 工作的 Linux 指令

一旦知道哪個檔案或目錄存放您要的排程,在 Linux 中列出 cron 工作就只是為範圍挑選正確指令的問題。最常見的起點是 crontab -l,它會依安裝順序列印目前使用者 crontab 中的每一行。如果使用者沒有 crontab,指令會改為列印 "no crontab for <user>",這本身就是一個有用的答案——它告訴您並沒有任何排程,而不是指令失敗。

若要查看其他使用者的 crontab,請在前面加上 sudo 並傳入 -u <user>,例如 sudo crontab -l -u www-data。只有 root 或具有正確 sudoers 項目的使用者才能讀取他人的 crontab,而 cron 守護行程在從 spool 載入檔案時會強制執行擁有權檢查。

全系統排程分散在多個位置。/etc/crontab 是經典的系統 crontab,使用六個欄位:分鐘、小時、日期、月份、星期,以及執行指令的使用者。Drop-in 檔案位於 /etc/cron.d/ 下,遵循相同的六欄位格式。放置於 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly 中的 run-part 腳本會在開機時以及對應的時鐘時間由 /etc/crontab 或 anacron 執行;它們包含 shell 腳本或符號連結而非 cron 運算式。最後,/var/spool/cron/ 為每個使用者儲存一個檔案,內含該使用者的 crontab 內容,且僅供 root 讀取。

指令或路徑範圍是否需要 root
crontab -l目前使用者的 crontab否
sudo crontab -l -u <user>特定使用者的 crontab是
cat /etc/crontab系統 crontab(六個欄位)否
ls /etc/cron.d/Drop-in 排程檔案(六個欄位)否
ls /etc/cron.{hourly,daily,weekly,monthly}Run-part 腳本目錄否
cat /var/spool/cron/*每個使用者儲存的 crontab是
crontab -l | grep -v '^#'從目前使用者中移除註解否

Cron 工作行的實際意義

每個一般使用者的 crontab 行程式具有相同的結構:五欄位排程,後接要執行的 shell 指令。五個欄位依序為分鐘、小時、日期、月份與星期。在傳統 Unix 風格的 crontab 中,星期的數值從代表週日的 0 開始到代表週六的 6 為止,如 Linux man-pages crontab(5) 參考手冊所記載。星號代表該欄位的「每個有效值」,因此 * * * * * /opt/healthcheck.sh 的前三個欄位就只是「每分鐘、每小時、每一天」,而最後兩個欄位再延伸為每月和每個工作日。

cron 文法支援一些延伸寫法。一個斜線引入步進,因此分鐘欄位中的 */15 會解析為每小時內的 0、15、30 與 45。一個包含式範圍(例如 1-5)在星期欄位中代表週一至週五。您也可以用逗號列出個別數值,例如 0 9 * * 1,3,5 代表週一、週三與週五的 09:00。如果您想手動讀取現有的行,cron 解析器速查表 詳細說明了上述各種寫法。

只有系統檔案中才會出現一個微妙的細節:/etc/crontab 以及 /etc/cron.d/ 下的檔案會在排程與指令之間插入一個使用者欄位,因此該行程式會像 30 2 * * 1 root /opt/backup.sh。使用者的 crontab 省略該欄位,因為守護行程已經知道擁有者。

從易讀排程建立新的 Cron 運算式

讀取現有的 crontab 是一回事;寫出一行真正符合您需求的新工作則是另一回事。欄位順序是最常見的絆腳石,僅僅對調一對欄位——例如將小時與分鐘對調——就會無聲無息地把工作平移一個小時或一百分鐘。為避免這種情況,請將您心中的排程對應到文件記載的五個欄位順序:分鐘、小時、日期、月份、星期。

Cron 運算式產生器 會從易讀排程為您完成對應。它提供七個有限範圍的預設——每分鐘、每 N 分鐘、每小時、每日、工作日、每週、每月——並只顯示與所選預設相關的控制項。當您變更排程時,五欄位運算式與英文摘要會即時更新,方便您同時確認兩者。

排程預設運算式樣板預設控制項範例
每分鐘* * * * ** * * * *
每 N 分鐘*/N * * * **/15 * * * *
每小時0 * * * *0 * * * *
每日M H * * *0 2 * * *
工作日M H * * 1-530 9 * * 1-5
每週M H * * D0 3 * * 0
每月M H D * *0 4 1 * *

讀表方式:挑選符合工作頻率的預設,將變數字母替換為您在控制項中設定的數值,然後複製產生的那一行。針對一個應在每月 1 日 04:00 觸發的工作,將每月預設的日期設為 1、小時設為 4,就會得到 0 4 1 * * /opt/review.sh。分鐘範圍維持在 0 至 59,小時範圍在 0 至 23,工作日從週日 0 到週六 6,月份日期則在 1 至 31 之間。

如何產生五欄位 Cron 運算式

  1. 選擇符合工作頻率的排程類型。開啟 Cron 運算式產生器,並從每分鐘、每 N 分鐘、每小時、每日、工作日、每週或每月中挑選一項。所選預設會決定哪些控制項會出現,以及哪些欄位會自動填入。
  2. 設定該排程所顯示的值。相關的控制項可以是以分鐘為單位的間隔、每小時中的某一分鐘、每天中的某個小時、從 0(週日)到 6(週六)的某個工作日,或是從 1 到 31 的某個月份日期。其餘四個欄位則維持預設值。
  3. 複製產生的五欄位運算式,並在目標排程器與時區中加以驗證。將運算式貼到您的 crontab 中,附加您要執行的指令,並確認排程器設定的時區符合您的預期。請先在非正式環境中測試、記錄失敗狀況,並優先採用冪等指令,以確保重試或重疊執行時仍然安全。

如果您只需要檢查現有的運算式而非建立一個,請將產生器與一個能解析相同五個欄位的解析器搭配使用。如何在 Linux 中建立 cron 工作的操作指南 涵蓋了該工作流程中的編輯器端。

時區與排程常見陷阱

Cron 會以排程器設定的時區評估排程,而不是您筆電上顯示的那個時區。在大多數 Linux 發行版中,那是 /etc/timezone 中設定,或透過 timedatectl 資料庫設定的系統時區。如果排程器位於一台遠端主機或具有自身時鐘的容器上,那麼在您編輯器中看起來像 09:00 的時間,在該主機上的時鐘時間可能完全不同。日光節約時間的轉換也可能跳過或重複本地時間,因此一個排定在春季提前那一小時「不存在」時間的工作將不會執行,而排定在秋季重複那一小時內的工作則可能會執行兩次。

有幾個欄位存在事後無法被任何產生器偵測到的內建陷阱。一個排定在每月 29、30 或 31 日的工作會無聲地跳過任何不含該日期的月份,因此「每月最後一天」之類的運算式並不像 0 H 31 * * 那麼簡單,而 0 7 29 2 * 在非閏年也完全不會執行。Cron 運算式產生器內含的預設會避免同時設定日期與星期,這避開了某些 cron 實作在兩個欄位都被限制時所套用、與實作相關的 OR 行為。

運算式本身僅包含時間資訊。它並不承載指令、使用者、環境變數、重試、鎖定或監控。產生過程在本機瀏覽器中執行,不會上傳任何內容,但運算式一旦進入真實的 crontab,便會繼承該排程器的行為。某些託管式排程器——例如 Kubernetes CronJobs、特定 CI 執行器和若干受管的 cron 服務——會在傳統五欄位格式之上加入秒、年、問號或特定廠商語法。部署前請先確認您的目標接受標準的五欄位 cron,並在每次平台升級後重新驗證。Cronie crontab(5) 來源 記錄了本文預設所遵循的文法。