Configure Quartz for interval and different starting hours - cron

I've been looking for this for a while now, but I didn't find a way to do what I want.
I have a Web Page in which a user can plan some actions during a week.
For example:
On monday morning, from 8:00 to 10:00, do this...
On tuesday afternoon, from 1:30 to 2:00, do that...
Well, I would like that my Java program automatically launch the actions for the periods that the user selected. And, during these time intervals, repeat the action every X minutes. (Should be configurable)
What I thought was setting up Quartz with Cron scheduler. However, I don't know how to handle half hours...
More precisely:
This will work for my first example (repeat every 5 minutes between 8 to 10):
0 0/5 8-10 * * MON
But how to handle the second example? (Starting at 1:30 but repeat the action every 5 minutes??)
Thanks !
Philippe

actually I found an answer to my needs: DailyTimeIntervalScheduleBuilder !
Here is an example for answer my need:
DailyTimeIntervalScheduleBuilder scheduleBuilder = DailyTimeIntervalScheduleBuilder.dailyTimeIntervalSchedule()
.startingDailyAt(new TimeOfDay(13, 30, 0))
.endingDailyAt(new TimeOfDay(14, 0, 0))
.onDaysOfTheWeek(1)
.withIntervalInMinutes(5);
Problem solved
Philippe

Related

Cron expression to fire azure function twice every day

I have created a Timer trigger azure function which initially was as asked to run just once every day. But now its been asked to twice every day.
So I need to run it morning 2:30 and noon 13:15.
I wrote my cron expression like this
0 30,15 2,13 * * *
But my confusion is will it fire 2:15 and 2:30 and 13:15 and 13:30?
Yes, the expression you posted will fire at all four times, as you can see in the crontab.guru screenshot below.
The two explicit times you are requiring are not possible using a single cron expression.
Crontab guru is The quick and simple editor for cron schedule expressions.
Please be advised it does not take seconds into account, so remove the first element if you want to check something.

This is a cron-job in node.js

I am trying to make a cron-job that runs a function after 24 hours but if it's a friday, then the timer should stop at 23:59 and restart on sunday at 23:59. How do I do this?
Imagine a request being created. When this is created, an email function has to be called. If a reply for the said email is not received within 24 hrs, the email function should be called again and the 24 hrs timer should start again to repeat this process for a third time. But if it is a saturday and the timer is running, it should stop and then restart back on monday. (This is to indicate that no time from saturday or sunday has been consumed in the timer).
Some cron patterns allow you to specify day ranges (e.g. 59 23 * * 1-5 runs only Monday to Friday).
Fore more complicated logic, setting the cron to run everyday + inspecting the day of the week in your application might be simpler like O. Jones commented.
Personally, I'd lean towards the latter so you can log when the cron ran and skipped because it was a weekend, so you have a record, if things ever go wrong or you need to debug something.

Google App Engine cron job schedule repeat on days with DST changes

I have a cron job that should repeat every 3 hours and must land on 9:30 in US/NY time.
If I start the job at 0:30, and run it every 3 hours, will it run at 9:30 on daylight savings days?
The documentation is a bit vague on this: https://cloud.google.com/scheduler/docs/configuring/cron-job-schedules#daylight_savings_time. It uses wall clock time to start, but does it use wall-clock time for each offset as well?
Alternatively, could I start it using 9:30 as the trigger time, and then every 3 hours until 6:30am the next day?
As you mentioned, Cloud scheduler uses wall clock time, is expected that the executions changes according the wall time.
To run a job from 9:30am to 6:30am (next day) you need 2 Scheduler jobs
1st will be run every 3 hours starting 9:30 to 23:30
30 9/3 * * *
2nd will be run every 3 hours starting 0:30 to 6:30
30 0-6/3 * * *
I use this page when I have doubts about cron format
The best way to completely avoid any kind of issue with DST changes is to switch to a timezone unaffected by those, as the documentation states:
If your job requires a very specific cadence, you may want to consider choosing time zones that do not observe daylight savings time.
A good one would be UTC for example, and as the difference between NY(GMT -4) and UTC(GMT) is 4h you just need to add 4 to your desired starting time.
With that you are assuring that the scheduled hours do not get modified and whatever you are expecting to be run is done as it should.
Regarding the start time of the trigger, it does not matter whether it is 0:30 or 9:30, once you create it, it will run every X hours/mins/seconds as you will have it specified beforehand.

Cron Scheduler use case

I am stuck and seek your help for my requirement , where I need to run a job everyday except on Sunday mornings from 05:30 AM to 08:30 AM.
I have searched and could not see the solution for my problem, could you be able to help me out to get the correct Cron Expression. I have also tried it using http://www.cronmaker.com/
i think the easiest solution in cron is:
start your program without any limit
stop your code at 5:30 AM on sundays
30 5 * * 7 stop_code
start your code at 8:30 Am on sundays
30 8 * * 7 start_code_again
Thank you all for your response.
I have used a CronRoutePolicy with respect to Camel as we were using Camel.
In the route policy i could define Start time , Suspend Time and Resume Time.
I have deployed it but some how quartz has not started the job. Figuring out the issue now.

Repartition of cron

(I apologize in advance for bad formulation of my problem, please consider english is not my first language).
I have several processes (crons) and I want to "optimize" the schedule when to launch them.
For example, cron c1 starts every 3 minutes, cron c1 starts every 7 minutes and cron c3 starts every 18 minutes. Assume they last only a few seconds before stopping.
The unit of time here is 1 minute.
Now, what I want is that these crons are distributed so that we don't have a moment where many of them start and then long time interval with no cron at all. For example, if c1 and c3 both start at time 0, then they will start again together every 18 minutes. It would be better to start cron c1 at time 0 and then c3 at time 1, so that they are never launched together.
So the idea is, given a list of crons with periodicity, to plan a schedule, so that there is as much time between each cron as possible and as few as possible moments when two crons start together.
Are there some well-known algorithms about such problems?
The real-life application of this problem is: ~ 200 crons. Some of them are launched every 5 or ~10 or ~30 minutes and last very short (few seconds), some (~20 - 25) are launched every 2 hours and last a few minutes. So the idea is also that the big crons are not launched at the same time.
I am a mathematician myself and not a computer scientist, so I asked this question on https://math.stackexchange.com/, since I consider this being a "nice" question for mathematicians too.
I think you should consider the ressources used by each of your crons and then schedule your jobs from that.
I don't think there is a particular algorithm for that.

Resources