Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re: Scheduling type daemon

by hippo (Abbot)
on Sep 13, 2017 at 11:22 UTC ( #1199288=note: print w/replies, xml ) Need Help??


in reply to Scheduling type daemon

Some every quarter hour. Every hour. Once a day. It's too many processes for cron to cope with. The every minute ones, for example, I want to stagger over the minute so they're not all firing right bang on the zero seconds mark.

So, you need 4 shell (or perl or whatever) scripts like: minute.sh 15min.sh hour.sh day.sh which sit in some directory somewhere. Each script then runs all the jobs to be run on that schedule and does so sequentially (or uses GNU parallel or similar if you want a farm). Then your cron config only needs 4 entries and cron can quite happily cope with that.

* * * * * /foo/minute.sh */15 * * * * /foo/15min.sh 0 * * * * /foo/hour.sh 0 0 * * * /foo/day.sh

Replies are listed 'Best First'.
Re^2: Scheduling type daemon
by Laurielounge (Acolyte) on Sep 13, 2017 at 20:18 UTC
    The four crons is an acceptable approach but doesn't solve the other bit of the problem.

    Take the every minute job as an example. At stay time either all of the jobs fire in series (or in parallel, doesn't really matter). What I'm trying to do is stretch the load over the period, in the case, the minute.
    As I said, I've got the scheduling database ready. So on the minute when the cron fires, I want to run these few jobs immediately, at the five second mark (say) these ones... for the every 15 minute job, I want to immediately run these jobs, and at the three minute mark (say) run these ones... the five minute (say) run these ones... so the cron job fires a script which then times the execution of the jobs. Which may be timed to the second. The accuracy of the timing is not really important, its just about spreading the load a bit. I say "to the second" as that seems to me the only way to get that granularity in the "every minute" job.
      In the script, just run the scripts one by one in a loop. Add a sleep with the value of available seconds / number of jobs.
      ($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1199288]
help
Chatterbox?
[marto]: "Okay, sure, there are in fact museums and art galleries and other culturally enlightened things to do in Glasgow, but that wouldn't have made a funny comic"
LanX .oO( cemetery breweries ? )

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (9)
As of 2017-12-15 11:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    What programming language do you hate the most?




















    Results (431 votes). Check out past polls.

    Notices?