[Catalyst] [RFC] C::P::Scheduler - cron-like scheduling of events
Adam Jacob
adam at stalecoffee.org
Mon Dec 12 07:13:15 CET 2005
Do you write this yourself, or use Schedule::Cron?
Adam
On Dec 11, 2005, at 8:01 PM, 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