Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:
例子:
{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}
例 “0 0 12 ? * WED” 在每星期三下午12:00 执行(年份通常 省略)
Seconds Minutes Hours DayofMonth Month DayofWeek Year或
Seconds Minutes Hours DayofMonth Month DayofWeek
cron表达式
字段 允许值 允许的特殊字符
秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可选) 留空, 1970-2099 , - * /
字段含义
*:代表所有可能的值
-:指定范围
,:列出枚举 例如在分钟里,"5,15"表示5分钟和20分钟触发
/:指定增量 例如在分钟里,"3/15"表示从3分钟开始,没隔15分钟执行一次
?:表示没有具体的值,使用?要注意冲突
L:表示last,例如星期中表示7或SAT,月份中表示最后一天31或30,6L表示这个月倒数第6天,FRIL表示这个月的最后一个星期五
W:只能用在月份中,表示最接近指定天的工作日
#:只能用在星期中,表示这个月的第几个周几,例如6#3表示这个月的第3个周五
实例:
0 * * * * ? 每1分钟触发一次
0 0 * * * ? 每天每1小时触发一次
0 0 10 * * ? 每天10点触发一次
0 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟触发
0 30 9 1 * ? 每月1号上午9点半
0 15 10 15 * ? 每月15日上午10:15触发
*/5 * * * * ? 每隔5秒执行一次
0 */1 * * * ? 每隔1分钟执行一次
0 0 5-15 * * ? 每天5-15点整点触发
0 0/3 * * * ? 每三分钟触发一次
0 0 0 1 * ? 每月1号凌晨执行一次
*/5 * * * * ? 每隔5秒执行一次
0 */1 * * * ? 每隔1分钟执行一次
0 0 5-15 * * ? 每天5-15点整点触发
0 0/3 * * * ? 每三分钟触发一次
0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发
0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发
0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
0 0 12 ? * WED 表示每个星期三中午12点
0 0 17 ? * TUES,THUR,SAT 每周二、四、六下午五点
0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发
0 15 10 ? * MON-FRI 周一至周五的上午10:15触发
0 0 23 L * ? 每月最后一天23点执行一次
0 15 10 L * ? 每月最后一日的上午10:15触发
0 15 10 ? * 6L 每月的最后一个星期五上午10:15触发
0 15 10 * * ? 2005 2005年的每天上午10:15触发
0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最后一个星期五上午10:15触发
0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发
“30 * * * * ?” 每半分钟触发任务
“30 10 * * * ?” 每小时的10分30秒触发任务
“30 10 1 * * ?” 每天1点10分30秒触发任务
“30 10 1 20 * ?” 每月20号1点10分30秒触发任务
“30 10 1 20 10 ? *” 每年10月20号1点10分30秒触发任务
“30 10 1 20 10 ? 2011” 2011年10月20号1点10分30秒触发任务
“30 10 1 ? 10 * 2011” 2011年10月每天1点10分30秒触发任务
“30 10 1 ? 10 SUN 2011” 2011年10月每周日1点10分30秒触发任务
“15,30,45 * * * * ?” 每15秒,30秒,45秒时触发任务
“15-45 * * * * ?” 15到45秒内,每秒都触发任务
“15/5 * * * * ?” 每分钟的每15秒开始触发,每隔5秒触发一次
“15-30/5 * * * * ?” 每分钟的15秒到30秒之间开始触发,每隔5秒触发一次
“0 0/3 * * * ?” 每小时的第0分0秒开始,每三分钟触发一次
“0 15 10 ? * MON-FRI” 星期一到星期五的10点15分0秒触发任务
“0 15 10 L * ?” 每个月最后一天的10点15分0秒触发任务
“0 15 10 LW * ?” 每个月最后一个工作日的10点15分0秒触发任务
“0 15 10 ? * 5L” 每个月最后一个星期四的10点15分0秒触发任务
“0 15 10 ? * 5#3” 每个月第三周的星期四的10点15分0秒触发任务
<el-form>
<el-row :gutter="24">
<el-col :span="4">
<el-form-item label="每:">
<el-select v-model="myFrequency.base" style="width:90%;" @change="selectChange1">
<el-option v-for="(item) in frequency" :label="item.label" :value="item.value" :key="item.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item v-show="myFrequency.base == 6" label="月=>">
<el-select style="width:85%;" v-model="myFrequency.monthValues" multiple @change="selectChange6">
<el-option v-for="(item,key) in monthValues" :label="item" :value="key" :key="key">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item v-show="myFrequency.base == 4" label="星期=>">
<el-select v-model="myFrequency.dayValues" multiple style="width:80%;" @change="selectChange4">
<el-option v-for="(item,key) in dayValues" :label="item" :value="key" :key="key">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item v-show="myFrequency.base >= 5" label="几号=>">
<el-select style="width:69%" v-model="myFrequency.dayOfMonthValues" multiple @change="selectChange5">
<el-option v-for="(item,index) in dayOfMonthValues" :label="item.label" :value="item.value" :key="index">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item v-show="myFrequency.base >= 2" :label="myFrequency.base >=3 ?'点222=>':'分钟11=>'">
<el-select v-show="myFrequency.base >= 3" v-model="myFrequency.hourValues" multiple style="width:80%" @change="selectChange3">
<el-option v-for="item in hourValues" :label="item" :value="item" :key="item">
</el-option>
</el-select>
<el-select v-model="myFrequency.minuteValues" v-show="myFrequency.base <3" multiple style="width:70%" @change="selectChange2">
<el-option v-for="item in minuteValues" :label="item" :value="item" :key="item">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item v-show="myFrequency.base >= 3" label="分钟=>">
<el-select v-model="myFrequency.minuteValues" multiple style="width:70%" @change="selectChange2">
<el-option v-for="item in minuteValues" :label="item" :value="item" :key="item">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="23">
<el-form-item label="cron表达式:">
{{jobCron}}
</el-form-item>
</el-col>
</el-row>
</el-form>
data() {
return {
jobCron: '',
txtLen: 500,
isCron: true,
myFrequency: {
base: 1,
dayValues: '',
dayOfMonthValues: '',
monthValues: '',
hourValues: '',
minuteValues: ''
},
modifyFrequency: {
dayValues: '',
dayOfMonthValues: '',
monthValues: '',
hourValues: '',
minuteValues: ''
},
frequency: [
{
value: 1,
label: '分钟'
},
{
value: 2,
label: '小时'
},
{
value: 3,
label: '天'
},
{
value: 4,
label: '星期'
},
{
value: 5,
label: '月'
},
{
value: 6,
label: '年'
}
],
baseFrequency: {
minute: 1,
hour: 2,
day: 3,
week: 4,
month: 5,
year: 6
},
dayValues: {
1: '星期日',
2: '星期一',
3: '星期二',
4: '星期三',
5: '星期四',
6: '星期五',
7: '星期六'
},
dayOfMonthValues: [
],
monthValues: {
1: '一月',
2: '二月',
3: '三月',
4: '四月',
5: '五月',
6: '六月',
7: '七月',
8: '八月',
9: '九月',
10: '十月',
11: '十一月',
12: '十二月'
},
hourValues: [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23
],
minuteValues: [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55],
baseCout: 0,
id: '',
}
getMothValue() {
let list = []
for (let i = 0; i < 31; i++) {
let j = i
let currentJson = {
value: ++j,
label: j + '号'
}
list[i] = currentJson
}
this.dayOfMonthValues = list
},
hasClear(val) {
if (val < this.baseCout) {
this.myFrequency.minuteValues = []
this.myFrequency.hourValues = []
this.myFrequency.dayValues = []
this.myFrequency.dayOfMonthValues = []
this.myFrequency.monthValues = []
}
},
getCron(val) {
var cron = ['0', '*', '*', '*', '*', '?']
if (val && val >= this.baseFrequency.hour) {
if (this.myFrequency.minuteValues.length == 0)
this.myFrequency.minuteValues.push(0)
cron[1] =
typeof this.myFrequency.minuteValues !== 'undefined'
? this.myFrequency.minuteValues
: '0'
}
if (val && val >= this.baseFrequency.day) {
if (this.myFrequency.hourValues.length == 0)
this.myFrequency.hourValues.push(0)
cron[2] =
typeof this.myFrequency.hourValues !== 'undefined'
? this.myFrequency.hourValues
: '*'
}
if (val && val === this.baseFrequency.week) {
if (this.myFrequency.dayValues.length == 0)
this.myFrequency.dayValues.push('1')
cron[3] = '?'
cron[5] = this.myFrequency.dayValues
}
if (val && val >= this.baseFrequency.month) {
if (this.myFrequency.dayOfMonthValues.length == 0)
this.myFrequency.dayOfMonthValues.push(1)
cron[3] =
typeof this.myFrequency.dayOfMonthValues !== 'undefined'
? this.myFrequency.dayOfMonthValues
: '?'
}
if (val && val === this.baseFrequency.year) {
if (this.myFrequency.monthValues.length == 0)
this.myFrequency.monthValues.push('1')
cron[4] =
typeof this.myFrequency.monthValues !== 'undefined'
? this.myFrequency.monthValues
: '*'
}
this.jobCron = cron.join(' ')
},
selectChange1(val) {
this.hasClear(val)
this.baseCout = val
console.log(',,',val)
this.getCron(val)
},
selectChange2(val) {
this.myFrequency.minuteValues = val
this.getCron(this.myFrequency.base)
},
selectChange3(val) {
this.myFrequency.hourValues = val
this.getCron(this.myFrequency.base)
},
selectChange4(val) {
this.myFrequency.dayValues = val
this.getCron(this.myFrequency.base)
},
selectChange5(val) {
this.myFrequency.dayOfMonthValues = val
this.getCron(this.myFrequency.base)
},
selectChange6(val) {
this.myFrequency.monthValues = val
this.getCron(this.myFrequency.base)
},
http://www.pdtools.net/tools/becron.jsp
或者
http://cron.qqe2.com/