一、什麼是cron,用來做什麼的
cron是一項計畫任務,是任務在約定的時間執行已經計畫好的工作,這是表面的意思。在linux中,我們經常用到 cron 伺服器來完成這項工作。cron伺服器可以根據配置檔案約定的時間來執行特定的任務。
二、cron表示式的格式和語法規則
1、 cron表示式是乙個字串,字串以5或6個空格隔開,分為6或7個域,每乙個域代表乙個含義,cron表示式有如下兩種語法格式:
秒 分鐘 小時 日期 月份 星期
1、seconds minutes hours dayofmonth month dayofweek
秒 分鐘 小時 日期 月份 星期 年
2、seconds minutes hours dayofmonth month dayofweek year
2、cron表示式各個域的取值範圍 和 允許特殊字元,需要注意的是
日期的取值需要看月份 (例如:1月份,日期就能取到31,而2月份 日期就取不到 30 和 31)
星期的取值 1代表星期天,2代表星期一,依次類推......,7代表星期六
如下表所示:秒分鐘
小時日期
月份星期
年 (可選)
取值0 - 59
0 - 59
0 - 23
1 - 31
1 - 12
1 - 7
1970 - 2099
允許特殊字元
, - * /
, - * /
, - * /
, - * / ? l w c
, - * /
, - * / ? l c #
, - * /
3、特殊字元的含義
(1)*:表示匹配該域的任意值,假如在minutes域中使用*,即表示每分鐘都會觸發事件。
(2)?:只能用在dayofmonth 和 dayofweek兩個域中,表示未說明的值,即不關心它為何值,用於解決dayofmonth 和 dayofweek之間的衝突。
因為dayofmonth 和 dayofweek會相互影響。例如cron表示式為「 * * * 20 * ? 」,則表示任務設定在每月的20日觸發排程,不管20日到底是星期幾都會觸發,而如果把?換成 *,則表示不管星期幾都會觸發排程, 而dayofmonth又設定為20,表示只能在每個月的20日觸發排程,這樣就會引起衝突,所以必須要對其中乙個設定? 來表示並不關心它為何值。
(3)-:指定範圍,例如:在minutes域中使用5-20,表示從5分到20分鐘每分鐘觸發一次。
(4)/:符號前的數字表示開始時間,符號後的數字表示每次遞增的值。例如:在minutes域中使用5/20,表示從5分分鐘開始執行,每隔20分鐘觸發一次。
(5),:表示列出列舉值。例如:在minutes域中使用5,20,則表示在5分鐘 和 20分鐘各觸發一次。
(6)l:表示last,只能出現在dayofmonth 和 dayofweek域,例如:
在dayofmonth域中使用l,則表示在當前月的最後一天觸發一次。
在dayofweek域中使用l,則表示在當前月每週的星期六觸發一次。 如果在dayofweek域中和數字聯合使用,則表示當前月的最後乙個星期幾觸發一次,如:6l表示當前月的最後乙個星期五觸發一次
(7)w:只能用在月份中,表示最接近指定天的工作日 (周一到周五)。
例如:在dayofmonth域中使用5w 指 "最接近當前月第5天的工作日",如果當前月的第5天是星期六,則將在最近的工作日:星期五,即當前月的第4天觸發。如果當前月的第5天是星期天,則在當前月的第6天(周一)觸發;如果當前月的第5天在星期一 到星期五之間,則就在當前月的第5天觸發。另外一點,w在尋找最近工作日是不會跨過月份。
(8)lw:這兩個字元可以連用,表示在當前月的最後乙個工作日,即當前月的最後乙個星期五。
(9)#:用於確定每個月第幾個星期幾,只能出現在dayofmonth域。例如在4#2,表示當前月的第二個星期三。
4、cron表示式示例
0 0 10,14,16 * * ? 每天上午10點,下午2點,4點
0 0/30 9-17 * * ? 朝九晚五工作時間內每半小時
0 0 12 ? * wed 表示每個星期三中午12點
"0 0 12 * * ?" 每天中午12點觸發
"0 15 10 ? * *" 每天上午10:15觸發
"0 15 10 * * ?" 每天上午10:15觸發
"0 15 10 * * ? *" 每天上午10:15觸發
"0 15 10 * * ? 2005" 2023年的每天上午10:15觸發
"0 * 14 * * ?" 在每天下午2點到下午2:59期間的每1分鐘觸發
"0 0/5 14 * * ?" 在每天下午2點到下午2:55期間的每5分鐘觸發
"0 0/5 14,18 * * ?" 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發
"0 0-5 14 * * ?" 在每天下午2點到下午2:05期間的每1分鐘觸發
"0 10,44 14 ? 3 wed" 每年三月的星期三的下午2:10和2:44觸發
"0 15 10 ? * mon-fri" 周一至周五的上午10:15觸發
"0 15 10 15 * ?" 每月15日上午10:15觸發
"0 15 10 l * ?" 每月最後一日的上午10:15觸發
"0 15 10 ? * 6l" 每月的最後乙個星期五上午10:15觸發
"0 15 10 ? * 6l 2002-2005" 2023年至2023年的每月的最後乙個星期五上午10:15觸發
"0 15 10 ? * 6#3" 每月的第三個星期五上午10:15觸發
cron表示式使用
cron表示式是乙個字串,分為6或7個域,每乙個域代表乙個含義,格式分別如下 seconds minutes hours dayofmonth month dayofweek seconds minutes hours dayofmonth month dayofweek year 每個域的取值寫法...
Cron表示式簡單的介紹
cron表示式是乙個字串,字串以5或6個空格隔開,分為6或7個域,每乙個域代表乙個含義,cron有如下兩種語法格式 seconds minutes hours dayofmonth month dayofweek year或 seconds minutes hours dayofmonth mont...
cron表示式的使用
先了解cron表示式 cron表示式是乙個字串,字串以5或6個空格隔開,分為6或7個域,每乙個域代表乙個含義,cron有如下兩種語法格式 seconds minutes hours dayofmonth month dayofweek year或seconds minutes hours dayof...