[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

CmdSchedule.pl specs



This email is directed mainly at Aaron, but others are encouraged to
give it a gander.

Regarding CmdSchedule.pl:

This will be the LKB's scheduler.  All scheduled events will flow
through this.  This provides us an easy way to offload anything that
doesn't need to happen immediatly to create a more responsive site for
users, as well as provide us, the developers, a unified way to schedule
activities.  The moderation system will be making immediate use of this
system, and php functions will be developed to make it easy for php
developers to utilize the system for objects.

Now, onto the details (for Aaron's sake as he'll be coding this):

The perl script(s) will execute via cron every minute.  Upon execution
the script will query the CmdSchedule table to look for any commands to
be executed during that minute.  If any commands meet that criteria,
the perl script will spawn those events, update the table accordingly,
and exit.  

The fields, Hour, Minute, WeekDay, MonthDay, and Month, must match in
typical cron fassion.  In addition to this, Status must be "Waiting" or
"PendingRetry".  RepeatCount must be greater than 0 or less than 0 OR 
equal to 0 with a status of "PendingRetry".

If these criteria are met, the command in the ExternalCmds table that
matches the CommandID in the CmdSchedule table is spawned with the
Target Objects field passed as parameters.  The record in CmdSchedule
is then updated to reflect this.  This update entails the following:

RepeatCount is decremented by 1 unless it is -1 which means no
repeat limit, or if it's 0 already.  Status should be set to "Running".
LastRun should be set to the time of the execution.  Attempts should be
incremented by 1.  

If the script fails for any reason, the status should be set to
PendingRetry.  This should probably be done within the script so that
the perl script doesn't have to hang around.  Thoughts?

If the PerlScript runs and finds any commands in a state of "Waiting"
with a repeatCount of 0, those records should be removed.  

If it runs, and finds any records in a state of "PendingRetry" with an
Attempts of 3 or more, the status should be set to "Failed" and an
email should be generated to the NotificationAddresses.

It should probably also be up to the scripts themselves to update
Status to "Waiting" when they are finished executing.  Again, thoughts
welcome, but I don't think the Perl script should hang around.  Any
script issues would cause the Perl script to hang around possibly
causing cron continuing to spawn until the system pukes.  If you have
better ideas let me know, but I don't have a problem with making the
scripts and the scheduler working together for now.

I think thats enough detail on how it should work.  I only need support
for *, -, and "," operators in the time fields for starters.  

I probably didn't cover everything in the best order here... so if you
can't make order or sense out of it, hit me with your Q's.

Thanks!



-- 
Jason Pincin
Linux Knowledge Base Project Leader (http://www.linuxkb.org/)
http://vodka.linuxkb.org/~chardros/