1

我想在某个开始时间后每小时运行一次 cron 作业。目前我的 cron 工作表达是

cronExpression = seconds + " " + minutes +  " " +   hours +"/1" + " " + " * * ? *" ;

(秒、分、小时由用户选择传入)

作业在正确的时间开始,每小时运行一次,直到午夜,然后停止,直到第二天的时间,然后恢复。如何让工作持续运行而不是在午夜停止?

我知道我可以将表达式更改为

cronExpression = seconds + " " + minutes +  " " * * * ? *" ;

但它不会考虑开始时间。它只会每小时运行一次。

提前致谢, 丰富

4

3 回答 3

3

你的意思是你想让工作在给定的时间开始,然后永远每小时运行一次吗?如果是这样,我认为 cron 表达式不是正确的方法。

如果您使用的是调度程序,那么启动作业并以给定的时间间隔永远运行应该很简单。例如,这里是JobBuilder的 Quartz 调度程序文档中的一个片段:

     JobDetail job = newJob(MyJob.class)
         .withIdentity("myJob")
         .build();

     Trigger trigger = newTrigger() 
         .withIdentity(triggerKey("myTrigger", "myTriggerGroup"))
         .withSchedule(simpleSchedule()
             .withIntervalInHours(1)
             .repeatForever())
         .startAt(futureDate(10, MINUTES))
         .build();

     scheduler.scheduleJob(job, trigger);
于 2013-05-22T01:46:10.333 回答
0

使用你自己的表达方式

cronExpression = 秒 + " " + 分钟 + " " * * * ? *" ;

startAt(your start time) method() 提到了触发器的开始时间。这个开始时间将隐含地告诉石英触发器何时开始生效。

于 2013-06-06T09:11:10.680 回答
0

如果当前时间在您的开始时间之后,则每小时运行一个包装器来运行您的工作。

例如,

case $(date +%H) in 
    09 |1[0-6] ) pingcheck ;;
esac

将在 09:00 到 16:59 之间运行pingcheck(无论是什么 :-)。

于 2013-05-22T13:29:53.397 回答