定時(shí)任務(wù)是我們?nèi)粘i_(kāi)發(fā)中經(jīng)常用到的一個(gè)功能點(diǎn),無(wú)論是Linux服務(wù)器上Crontab還是Spring task?schedule,都會(huì)使用到cron表達(dá)式去實(shí)現(xiàn)定時(shí)任務(wù)的配置。不過(guò),一定要注意,Linux cron表達(dá)式和Spring的cron表達(dá)式不一樣,下面來(lái)一次講清楚。
一,Linux cron表達(dá)式
1,長(zhǎng)度: 5 位 (中間有一個(gè)空格)
2,字段含義和取值
分?時(shí) 天 月 周
在以上各個(gè)字段中,還可以使用以下特殊字符:
- "*"代表所有的取值范圍內(nèi)的數(shù)字,如月份字段為*,則表示1到12個(gè)月;
- "/"代表每一定時(shí)間間隔的意思,如分鐘字段為*/10,表示每10分鐘執(zhí)行1次。
- "-"代表從某個(gè)區(qū)間范圍,是閉區(qū)間。如“2-5”表示“2,3,4,5”,小時(shí)字段中0-23/2表示在0~23點(diǎn)范圍內(nèi)每2個(gè)小時(shí)執(zhí)行一次。
- ","分散的數(shù)字(不一定連續(xù)),如1,2,3,4,7,9。
- cron默認(rèn)每1分鐘掃描一次,全為*即為每分鐘一次
- 月字段還可以為字母L,表示每月最后一天
注:由于各個(gè)地方每周第一天不一樣,因此Sunday=0(第一天)或Sunday=7(最后1天)。
3,示例
示例:
每一分鐘執(zhí)行一次command(因cron默認(rèn)每1分鐘掃描一次,因此全為*即可)
* ? ?* ? ?* ? ?* ? ?* ?command每小時(shí)的第3和第15分鐘執(zhí)行command
3,15 ? * ? ?* ? ?* ? ?* ?command每天上午8-11點(diǎn)的第3和15分鐘執(zhí)行command:
3,15? 8-11? *? *? *? command每隔2天的上午8-11點(diǎn)的第3和15分鐘執(zhí)行command:
3,15? 8-11? */2? * ? * ?command每個(gè)星期一的上午8點(diǎn)到11點(diǎn)的第3和第15分鐘執(zhí)行command
3,15? 8-11?? *?? *? 1 command每晚的21:30重啟smb
30 ?21?? *?? *? *? /etc/init.d/smb restart每月1、10、22日的4 : 45重啟smb
45? 4? 1,10,22? *? *? /etc/init.d/smb restart每周六、周日的1 : 10重啟smb
10? 1? *? *? 6,0? /etc/init.d/smb restart每天18 : 00至23 : 00之間每隔30分鐘重啟smb
0,30 ?18-23 ?* ?* ?* ?/etc/init.d/smb restart每一小時(shí)重啟smb
* ?*/1 ?* ?* ?* ?/etc/init.d/smb restart晚上11點(diǎn)到早上7點(diǎn)之間,每隔一小時(shí)重啟smb
* ?23-7/1 ?* ??* ??* ?/etc/init.d/smb restart每月的4號(hào)與每周一到周三的11點(diǎn)重啟smb
0 ?11 ?4 ?* ?mon-wed ?/etc/init.d/smb restart每小時(shí)執(zhí)行/etc/cron.hourly目錄內(nèi)的腳本
0? */1?? *?? *?? *??root run-parts /etc/cron.hourly
二,Spring cron表達(dá)式
1,長(zhǎng)度:6 位 (中間有一個(gè)空格)
2,字段含義和取值
秒 分 時(shí) 天 月 周?
?注意: 和Linux cron的區(qū)別就是多一個(gè)秒的配置
-
字段可能是一個(gè)星號(hào)*,它表示該字段可以使用的所有范圍。對(duì)于周或天字段,可以使用問(wèn)號(hào)(?)代替星號(hào)
-
","分散的數(shù)字(不一定連續(xù)),如1,2,3,4,7,9
-
"-"代表從某個(gè)區(qū)間范圍,是閉區(qū)間。如“2-5”表示“2,3,4,5”,小時(shí)字段中0-23/2表示在0~23點(diǎn)范圍內(nèi)每2個(gè)小時(shí)執(zhí)行一次
-
"/"代表每一定時(shí)間間隔的意思,如分鐘字段為*/10,表示每10分鐘執(zhí)行1次。
-
周字段和月字段可以是英文名(Monday,F(xiàn)riday,May,October這些),取前三個(gè)字母,忽略大小寫(xiě)
-
天字段可以是L,表示月的最后一天; 如果是L-1,表示月的倒數(shù)第二天
-
周字段也可以是L,表示周的最后一天
-
周字段可以使nL,表示每月最后的周n
-
天字段可以是nW,表示每個(gè)月的第n周
-
天字段可以是LW,表示每個(gè)月的最后的一周
-
周字段可以是d#n,表示一個(gè)月的第n周的第d天
3,示例
0 0 * * * *
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-681526.html每天的零時(shí)零分
*/10 * * * * *
每10秒
0 0 8-10 * * *
每天8點(diǎn),9點(diǎn),10點(diǎn)
0 0 6,19 * * *
每天6點(diǎn)正和19點(diǎn)正
0 0/30 8-10 * * *
每天8:00, 8:30, 9:00, 9:30, 10:00, 10:30
0 0 9-17 * * MON-FRI
周一到周五的9點(diǎn)到17點(diǎn)
0 0 0 25 DEC ?
圣誕夜零時(shí)
0 0 0 L * *
每個(gè)月最后一天零時(shí)
0 0 0 L-3 * *
每月倒數(shù)第4天零時(shí)
0 0 0 * * 5L
每月最后的周五零時(shí)
0 0 0 * * THUL
每月最后的周四零時(shí)
0 0 0 1W * *
每月第一周的零時(shí)
0 0 0 LW * *
每月最后一周的零時(shí)
0 0 0 ? * 5#2
每個(gè)月的第二周的周五的午夜零時(shí)
0 0 0 ? * MON#1
每個(gè)月的第一個(gè)周一的午夜零時(shí)
4,注解用法
上面這些示例,都是在注解@Scheduled(cron = "0 0 0 LW * *")
中使用,還有一些快捷的方式,用法如:
@Scheduled(cron = "@hourly")
@yearly
?(or?@annually
)
0 0 0 1 1 *
@monthly
0 0 0 1 * *
@weekly
0 0 0 * * 0
@daily
?(or?@midnight
)
0 0 0 * * *
@hourly
0 0 * * * *
碼字不易,記得點(diǎn)贊關(guān)注喲文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-681526.html
到了這里,關(guān)于一次講清楚Linux Cron和 Spring Cron的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!