工具型軟體 cron 是一款類 Unix 的作業系統下的基於時間的任務管理系統。使用者們可以透過 cron 在固定時間、日期、間隔下，執行定期任務（可以是命令和指令碼）。cron 常用於運維和管理，但也可用於其他地方，如：定期下載檔案和郵件。cron 該詞來源於希臘語 chronos，原意是時間。 通常，任務時間表（crontab）檔案儲存的指令被 crond 守護程序啟動，守護程序在後臺執行，並每一分鐘檢查是否有定期的作業需要執行。這類作業一般稱為 cron jobs。 crond 守護程序 crond 是一個用於執行週期命令的守護程序。透過守護程序（libsystemdsystemcrondservice ）形式執行的 cron 程式稱為 crond。 cron 會透過以下路徑查詢 crontabs： etccrontab：為系統任務時間表（crontab）。以前用於跑以日為單位、以周為單位、以月為單位的任務，現在用於跑 anacron。 etccrond：該目錄包含系統層次的任務時間表（crontabs），不同使用者共同使用。 varspoolcron：該路徑包含使用者透過 crontab 命令建立的任務時間表（crontables）。 crontab 命令 crontab 命令用於維護每個使用者的任務時間表（crontab）檔案。 crontab 命令用於安裝任務時間表（crontab）檔案，刪除和列舉 crond 守護程序已經在使用的任務時間表（crontab）。每個使用者都會擁有自己獨自的任務時間表（crontab），這些檔案會存放在 varspool 目錄下，不建議使用者直接修改這些檔案。MLS 模式下的 SELinux，你可以為這些任務時間表（crontab）分等級。 crontab 檔案 crontab 檔案包含 crond 守護程序所需的一系列作業和指令。 crontab 檔案的每一行均遵守特定的格式，由空格或 tab 分隔為數個領域，每個領域可以放置單一或多個數值。 檔案格式 使用者檔案 varspoolcron 下的任務時間表（crontab）檔案是使用者層次的，格式如下： 檔案格式說明 分鐘（0 59） 小時（0 23） 日（1 31） 月（1 12） 星期（0 6，表示從週日到週六） 被執行的命令 注： 在某些系統裡，星期日也可以為 7 不很直觀的用法：如果日期和星期同時被設定，那麼其中的一個條件被滿足時，指令便會被執行。請參考下例。 前 5 個域稱之分時日月周，可方便個人記憶。 從第六個域起，指明要執行的命令。 系統檔案 etccrontab 和 etccrond 目錄下的任務時間表（crontabs）檔案是系統層次的，格式如下： 檔案格式說明 分鐘（0 59） 小時（0 23） 日（1 31） 月（1 12） 星期（0 6，表示從週日到週六） 使用者名稱 被執行的命令 系統層次的任務時間表（crontabs）的任務經常會指定一個或以上的使用者進行執行，因此任務時間表（crontabs）檔案需要增加 使用者名稱 欄位。 表示式 在一個區域裡填寫多個數值的方法： 逗號表示列舉，例如： 1347 echo hello world 表示，在每小時的 1、3、4、7 分時，列印 hello world。 連詞符表示範圍，例如：16 echo hello world ，表示，每小時的 1 到 6 分鐘內，每分鐘都會列印 hello world。 星號代表任何可能的值。例如：在 小時域 裡的星號等於是 每一個小時。 百分號 表示 每 。例如：10 echo hello world 表示，每 10 分鐘列印一回hello world。 非標準字元 某些 cron 程式的擴充套件版本（如：Quartz Java scheduler）也支援斜線運算子，用於表示跳過某些給定的數。例如，3 在小時域中等於 036912151821 等被 3 整除的數； 例子 AIX 系統管理員的 Crontab 檔案 SYSTEM ACTIVITY REPORTS 8am5pm activity reports every 20 mins during weekdays activity reports every hour on Saturday and Sunday 6pm7am activity reports every hour during weekdays summary prepared at 1805 every weekday 02040 817 15 usrlibsasa1 1200 3 0 06 usrlibsasa1 0 187 15 usrlibsasa1 5 18 15 usrlibsasa2 s 800 e 1801 i 3600 ubcwyaqvm 常見錯誤 一個常見的錯誤是，命令列雙引號中使用 時，未加反斜線 ，例如： 錯誤的例子： 1 2 3 4 5 touch error_date Y m dtxt 在守護程序發出的電子郵件中會見到錯誤訊息： binsh unexpected EOF while looking for 正確的例子： 1 2 3 4 5 touch right_date Y m dtxt 使用單引號也可以解決問題： 1 2 3 4 5 touch error_date Y m dtxt 使用單引號就不用加反斜線了。這個例子會產生這樣一個檔案～error_20060403txt 1 2 3 4 5 touch error_date Y m dtxt 下例是另一個常見錯誤： Prepare for the daylight savings time shift 59 1 17 4 0 rootshift_my_timessh 初看似要在四月的第一個星期日早晨 1 時 59 分執行 shift_my_timessh，但是這樣設定不對。 特殊地，當星期域（第五個域）被指定為 時，星期域與日域（第三個域）執行 與 操作；而當星期域（第五個域）被指定為 以外的內容時，星期域與日域執行 或 操作。 所以這個程式會在 4 月 1 日至 7 日以及 4 月餘下的每一個星期日執行。 另一個常見錯誤是對分鐘設定的誤用。下例欲一個程式兩個小時執行一次： adds date to a log file 0246810121416182022 date varlogdatelog 而上述設定會使該程式在偶數小時內的每一分鐘執行一次。正確的設定是： runs the date command every even hour at the top of the hour 0 0246810121416182022 date varlogdatelog an even better way 0 2 date varlogdatelog 不傳送電子郵件 如果輸出結果來自 crontab 裡的命令，那麼 cron 守護程序會用電子郵件將它發給使用者。 若想關閉某個命令的輸出結果，可以將輸出結果重定向至 devnull。 devnull 21 在常用的 Vixie cron 中，也可以在檔案的開始部分加入命令來關閉所有命令的郵件輸出： MAILTO cron 命令 etcinitdcron reload Reloading configuration files for periodic command scheduler cron etcinitdcron stop Stopping cron via systemctl cronservice etcinitdcron start Starting cron via systemctl cronservice etcinitdcron restart Restarting cron via systemctl cronservice etcinitdcron status 其他話題 At：在未來某個時間執行一個作業。 ：runs job on a periodic interval anachronistically ：Mac OS X／Darwin cron 替代版本。 Unix 程式列表 參考文獻 外部連結 文件 Crontab Scheduling Tasks Computer Hope Linux UNIX 中 crontab 的用法 Opengroups crontab specification UNIX 03 正式文件 Crontab Reference and Examples at mkazcom 軟體 Cron for Windows CVSweb for FreeBSDs cron Paul Vixie 的 1993 Vixie cron 30 版本修補了一些錯誤 fcron vixiecron anacron 的增強版本（GPL） CategoryUnix 程序和任務管理相關軟體