cron表示式的介紹與使用

2021-09-25 05:32:57 字數 2980 閱讀 7530

一、什麼是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...