Cron 運算式產生器

撰寫和讀懂 crontab 排程。輸入一條 cron 運算式,就能用白話看到它何時執行、接下來幾次的執行時刻,以及五個欄位各自的意思。

分鐘
小時
星期

每分鐘。

接下來的執行


  •  
  •  
  •  
  •  
  •  

時間依你電腦所在的時區()顯示。cron 用的是伺服器的時區,兩者往往不同。

常用排程


選一條即可填入上面的輸入框。

* * * * *每分鐘
*/5 * * * *每 5 分鐘
*/15 * * * *每 15 分鐘
*/30 * * * *每半小時
0 * * * *每小時
0 */2 * * *每 2 小時
0 */6 * * *每 6 小時
0 */12 * * *每天兩次
0 0 * * *每天午夜
0 9 * * *每天上午 9 點
0 9 * * 1-5平日上午 9 點
0 9 * * 6,0週六和週日 9 點
0 0 * * 1每週一午夜
0 18 * * 5每週五下午 6 點
0 0 1 * *每月第一天
0 0 1 1 *每年第一天

每個欄位的意思


欄位可用數值
分鐘0 – 59
小時0 – 23
1 – 31
1 – 12, JAN – DEC
星期0 – 6, SUN – SAT (0 = 7)

特殊符號


符號意思
*任意數值
,分隔清單中的數值
-一段數值範圍
/範圍內的間隔

簡寫


@yearly, @annually0 0 1 1 *
@monthly0 0 1 * *
@weekly0 0 * * 0
@daily, @midnight0 0 * * *
@hourly0 * * * *
@reboot

它們不屬於 POSIX 的 cron,但幾乎所有實作都接受。

最容易踩的坑


  • 當「日」和「星期」都被限定時,cron 會在符合其中任一個的日子執行,而不是兩個都符合。「* * 3 * 1」在每月 3 日和每個週一都會執行。例外是其中一個以星號開頭:「* * */2 * 1」只在既是單數日又是週一的那天執行。手冊頁在這一點上寫錯了。
  • 把伺服器連同 cron 一起跑在 UTC 上。寫在有日光節約時間的時區裡的排程,每年會漏掉一次執行,並在下一次切換時重複一次。
  • 標準 cron 沒有秒和年的欄位。如果你需要那種精度,cron 就不是合適的工具。
  • 避開 @reboot。它取決於機器是如何重新啟動的、那一刻哪些服務已經就緒,因此很難推斷。
  • 五個欄位裝不下的排程,可以拆成兩條。想每 90 分鐘執行一次,就把「0 */3 * * *」和「30 1/3 * * *」並排寫上。
  • 指令要寫絕對路徑。cron 的 PATH 非常短,而且幾乎沒有你的 shell 裡那些環境變數。

Cron 運算式常見問題


五個欄位分別是什麼?
依序是:分鐘、小時、日、月、星期。帶星號的欄位對應任意數值。

星期日是 0 還是 7?
都可以。多數實作的星期日既接受 0 也接受 7,也接受 SUN 到 SAT 的三字母寫法。

我的工作為什麼沒在預期的時間執行?
常見原因是伺服器在另一個時區、上面講的「日」與「星期」規則,或者因為 cron 不載入你的 shell 設定而導致指令失敗。

這個頁面會把我的運算式送到別處嗎?
不會。運算式的解析和執行時刻的計算都在你的瀏覽器裡完成,不會上傳任何內容。

Wikipedia — Cron
Wikipedia — Crontab
Wikipedia — Daemon