Выражение Cron - запускать каждый час после времени запуска

Я хочу запускать задание cron каждый час после определенного времени запуска. В настоящее время мое выражение задания cron

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

(секунды, минуты, часы передаются по выбору пользователя)

Задание начинается в нужное время и выполняется каждый час до полуночи, затем останавливается до часа следующего дня, а затем возобновляется. Как заставить задание работать непрерывно и не останавливаться в полночь?

Я понимаю, что могу изменить выражение на

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

но тогда он не будет учитывать время начала. Он просто будет работать каждый час.

Заранее спасибо, Рич


person rich    schedule 21.05.2013    source источник
comment
Как часто нужно запускать задание?   -  person suspectus    schedule 22.05.2013
comment
Я хочу, чтобы задание выполнялось каждый час до тех пор, пока пользователь не остановит задание.   -  person rich    schedule 22.05.2013


Ответы (3)


Вы имеете в виду, что хотите, чтобы задание запускалось в заданное время, а затем запускалось один раз в час навсегда? Если это так, я не думаю, что выражение cron является правильным подходом.

Если вы используете планировщик, должно быть просто запустить задание и запустить его навсегда с заданным интервалом. Например, вот фрагмент документации планировщика Quartz для 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);
person pmorken    schedule 22.05.2013

Запускайте оболочку каждый час, которая запускает вашу работу, если текущее время после вашего времени запуска.

Например,

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

будет запускать pingcheck (что бы это ни было :-) с 09:00 до 16:59.

person tripleee    schedule 22.05.2013

Используйте собственное выражение

cronExpression = секунды + " " + минуты + " " * * * ? *";

с методом startAt(ваше время начала)() с ​​указанием времени запуска триггера. Это время запуска неявно сообщает кварцу, когда триггер начнет действовать.

person Shailesh Pratapwar    schedule 06.06.2013