Hey,
this is a very clean solution to a very common problem that i have. A lot of tasks that i run from cron have very different completion times. Right now i use the -s [1] option in crontab to make sure only one task is running at once and so that they don't overlap if they take longer to complete than the interval i schedule them. But the problem with the -s workflow is that the interval can get messed up if the interval is smaller than the execution period. This will basically "skip" a run.

With your patch this can be avioded in a very clean way. I have your patch a try and for my local testing usecase it worked as expected. This would clean up a lot of things in my personal workflow. Thank you very mich for the patch Job, much appreciated!

Thanks and greetings
Leo

[1] https://man.openbsd.org/crontab.5#s

On 10/07/2021 16:07, Job Snijders wrote:
The below patch adds a new kind of time specifier: an interval (in
minutes). When used, cron(8) will schedule the next instance of a job
after the previous job has completed and a full interval has passed.

A crontab(5) configured as following:

     $ crontab -l
     @3 sleep 100

Will result in this schedule:

     Jul 10 13:38:17 vurt cron[96937]: (CRON) STARTUP (V5.0)
     Jul 10 13:42:01 vurt cron[79385]: (job) CMD (sleep 100)
     Jul 10 13:47:01 vurt cron[3165]: (job) CMD (sleep 100)
     Jul 10 13:52:01 vurt cron[40539]: (job) CMD (sleep 100)
     Jul 10 13:57:01 vurt cron[84504]: (job) CMD (sleep 100)

A use case could be running rpki-client more frequently than once an
hour:

     @15 -n rpki-client && bgpctl reload

The above is equivalent to:

     * * * * * -sn sleep 900 && rpki-client && bgpctl reload

I borrowed the idea from FreeBSD's cron [1]. A difference between the
below changeset and the freebsd implementation is that they specify the
interval in seconds, while the below specifies in minutes. I was able
to leverage the 'singleton' infrastructure. And removed a comment that
reads like a TODO nobody is going to do.

Thoughts?

Reply via email to