我现在要定义一个cron表达式,用户可以指定cron表达式的触发时间,例如用户可以指定调度在每天的 8:00 9:10 10:20 11:30等这些时间段触发一个事件,有高手能够告诉我这样的cron表达式该怎么写么?
你的情况看起来只能分开写了
8:00 9:10 10:20 11:30
0 8 * * * /usr/bin/calendar
10 9 * * * /usr/bin/calendar
20 10 * * * /usr/bin/calendar
30 11 * * * /usr/bin/calendar
33 4 5 6 1 php /home/youraccount/public_html/cron.php
第一个数字33时分钟数,
第二个数字4是小时数,
第三哥数字5是每月第几天
第四个数字6是第几个月
第五个数字1是星期一
每个位置可以用多个数字,中间用逗号隔开,也可以用*来表示任意数字
几个例子:
32 * * * * 每个小时的第32分钟运行
12,42 * * * * 每个小时的第12和第42分钟运行。
*/15 */2 * * * 在下面时间运行: 0:00, 0:15, 0:30, 0:45, 2:00, 2:15, 2:30, ...
43 18 * * 7: 每个星期天的18:43分运行
参考http://www.ibm.com/developerworks/cn/linux/l-job-scheduling.html
如果使用quartz的话,好像选项更多。。cron的话,写4条也不是什么复杂的事情
0 0/70 8,11 * * ?
quartz好像可以这么弄
忘了不知支持不支持超过59的分钟数了。。没有办法的话,也只能写多几个了
这个功能很简单,用户由界面上输入或选择几点几点并提交表单--》你在后台生成用户输入时间对应的corn--》把表单时存起来(可以存入数据库)--》通过程序更新你的trigger对象(quartz),其中动态跟新trigger可以这么来做:
[code="java"]
public void execute(JobExecutionContext arg0) throws JobExecutionException {
Scheduler sched= null;
try {
sched = StdSchedulerFactory.getDefaultScheduler();
} catch (SchedulerException e) {
e.printStackTrace();
}
JobDetail jd = arg0.getJobDetail();
CronTrigger tt = (CronTrigger)arg0.getTrigger();
String exp = tt.getCronExpression();
String ns = "0/15 * * * * ?"; //根据用户输入动态拼凑
try {
tt.setCronExpression(ns);//这里更新trigger对象持有的cron表达式
sched.rescheduleJob(tt.getName(),"DEFAULT",tt);//刷新调度器
System.out.println("cron表达式重置完毕");
} catch (Exception e) {
e.printStackTrace();
}
[/code]