[Catalyst] [RFC] C::P::Scheduler - cron-like scheduling of events
Andrew Bramble
andrew.bramble at omnilab.com.au
Mon Dec 12 14:13:19 CET 2005
I agree with the idea in principle , until a angry webmaster chops your
fingers off for sneaking cron type execution into a web app.
Call me backwards , might this approach also support being a harness for
'real' cron jobs.
IE
__PACKAGE__->schedule(
trigger=>'remove sessions',
action=>'some forward or action to run'
);
then in a cron
#!perl
use MyApp
MyApp->schedule->trigger( 'remove sessions');
On Monday 12 December 2005 15:01, Andy Grundman wrote:
> I have a need for a simple scheduling plugin to do things like clean up
> database sessions, so I roughed out docs for a new plugin called Scheduler.
> If you've got any thoughts or suggestions, please let me know. :)
>
> -Andy
>
> =head1 NAME
>
> Catalyst::Plugin::Scheduler - Schedule events to run in a cron-like fashion
>
> =head1 SYNOPSIS
>
> use Catalyst qw/Scheduler/;
>
> # enable logging
> __PACKAGE__->config->{scheduler}->{logging} = 1;
>
> # run remove_sessions in the Cron controller every hour
> __PACKAGE__->schedule(
> at => '0 * * * *',
> event => '/cron/remove_sessions'
> );
>
> # Run a coderef at 4:05am every Sunday
> __PACKAGE__->schedule(
> at => '5 4 * * sun',
> event => \&do_stuff,
> );
>
> =head1 DESCRIPTION
>
> This plugin allows you to schedule events to run at recurring intervals.
> Events will run during the first request which meets or exceeds the
> specified time. Depending on the level of traffic to the application,
> events may or may not run at exactly the correct time, but it should be
> enough to satisfy many basic scheduling needs.
>
> =head1 CONFIGURATION
>
> Configuration is optional and is specified in MyApp->config->{scheduler}.
>
> =head2 logging
>
> Set to 1 to enable logging of events as they are executed. This option is
> enabled by default when running under -Debug mode.
>
> =head2 state_file
>
> The current state of every event is stored in a file. By default this is
> $APP_HOME/scheduler.state. If this file cannot be read or created at
> startup, your app will die.
>
> =head1 SCHEDULING
>
> Events are scheduled by calling the class method C<schedule> with two
> parameters: C<at> and C<event>.
>
> =head2 at
>
> The time to run an event is specified using crontab(5)-style syntax.
>
> 5 0 * * * # 5 minutes after midnight, every day
> 15 14 1 * * # run at 2:15pm on the first of every month
> 0 22 * * 1-5 # run at 10 pm on weekdays
> 5 4 * * sun # run at 4:05am every Sunday
>
> From crontab(5):
>
> field allowed values
> ----- --------------
> minute 0-59
> hour 0-23
> day of month 1-31
> month 0-12 (or names, see below)
> day of week 0-7 (0 or 7 is Sun, or use names)
>
> Instead of the first five fields, one of eight special strings may appear:
>
> string meaning
> ------ -------
> @reboot Run once, at startup.
> @yearly Run once a year, "0 0 1 1 *".
> @annually (same as @yearly)
> @monthly Run once a month, "0 0 1 * *".
> @weekly Run once a week, "0 0 * * 0".
> @daily Run once a day, "0 0 * * *".
> @midnight (same as @daily)
> @hourly Run once an hour, "0 * * * *".
>
> =head2 event
>
> The event to run at the specified time can be either a Catalyst private
> action path or a coderef. Both types of event methods will receive the $c
> object from the current request, but you must not rely on any request-
> specific information present in $c as it will be from a random user request
> at or near the event's specified run time.
>
> =head1 CAVEATS
>
> The time at which an event will run is determined completely by the
> requests made to the application. Apps with heavy traffic may have events
> run at very close to the correct time, whereas apps with low levels of
> traffic may see events running much later than scheduled. If this is a
> problem, you are encouraged to use a real cron scheduler.
>
> Events which consume a lot of time will slow the request processing for the
> user who triggers the event. Long-running tasks should not be scheduled
> using this plugin.
>
> _______________________________________________
> Catalyst mailing list
> Catalyst at lists.rawmode.org
> http://lists.rawmode.org/mailman/listinfo/catalyst
More information about the Catalyst
mailing list