【问题标题】:Cron Expression - Run every hour after a start timeCron 表达式 - 在开始时间后每小时运行一次
【发布时间】:2013-05-21 23:25:40
【问题描述】:

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

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

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

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

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

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

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

提前致谢, 丰富

【问题讨论】:

  • 作业多久运行一次?
  • 我希望作业永远每小时运行一次,直到用户停止作业。

标签: quartz-scheduler cronexpression


【解决方案1】:

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

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

     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);

【讨论】:

    【解决方案2】:

    如果当前时间晚于您的开始时间,则每小时运行一个包装器来运行您的作业。

    例如,

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

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

    【讨论】:

      【解决方案3】:

      用你自己的表达方式

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-08
        • 1970-01-01
        • 2012-11-02
        相关资源
        最近更新 更多