123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- ELYSIA_CRON
- by Eric Berdondini (gotheric)
- <eric@void.it>
- For installation instructions read INSTALL.TXT
- For module developers API documetation read API.TXT
- -----------------------------------------------------------------------------
- FEATURES
- -----------------------------------------------------------------------------
- Elysia Cron extends Drupal standard cron, allowing a fine grain control over
- each task and several ways to add custom cron jobs to your site.
- - Set the timings and frequencies of each cron task (you can run some jobs every
- day at a specified hour, other only monthly and so on...).
- For each task you can simply choose between some frequently used options
- ("once a day", "once a month" ...), or use a powerful "linux crontab"-like
- syntax to set the accurate timings. You can even define your frequently used
- options to speed up site configuration.
- - Parallel execution of cron task: you can group jobs in channels and execute
- then simultaneously: so a task that takes a lot of time to execute won't block
- other tasks that need to be executed every 5 minutes...
- - You can disable all tasks, an entire channel or a single task.
- - Change the priority/order of task execution.
- - Manual force the execution of a cron tasks.
- - Detailed overview of cron status with time statistics for single tasks and
- channels.
- - Powerful API for module developers: you can define extra cron tasks for your
- modules, each one with own default timings (site administrators can override
- them by configuration, other modules via hook_alter). Elysia Cron 2.0 gives a
- brand new API support (compatible with 1.0 version) with a lot of features.
- - Administrators can define custom jobs (call to functions with parameters), via
- the "script" option.
- - Several optimization for frequent cron calls and error handling.
- - Protection from external cron calling by cron_key or allowed host list.
- Elysia has no dependencies with contributed modules, and doesn't need to patch
- the core: it can be used in minimal Drupal installation with only core modules.
- It also can be used in a Drupal install profile.
- 3rd party integration:
- - Ping feature, for external tracking services like host-tracker to tell whether
- cron is functioning properly on your site.
- - Drush support: you can call "drush elysia-cron run" to manually run extended cron.
- - CTools support for exports/backup of task settings.
- - Features support.
- -----------------------------------------------------------------------------
- USAGE EXAMPLES
- -----------------------------------------------------------------------------
- Elysia cron is usually used in large sites that needs performance optimization.
- - Avoid drupal peak loads by distributing heavy load tasks during quiet periods
- of the day: for example you may want to rebuild the XML Sitemap of your site
- at 2:00AM in the morning, where usually only a few people are visiting your
- site. You can even move some tasks to be executed only once a month (log
- rotation, old records expiry...).
- - If you have tasks that should be executed very often, but don't want to
- execute ALL drupal cron tasks that often! For example, you may want to check
- for emails that needs to be sent to your users every 2 minutes. Standard cron
- is managed in a "monolithic" way, so even if you find out how to execute it
- every 2 minutes, you will end in having all cron tasks executed so often, with
- a lot of performance problems.
- - Fine tune cron cache management : drupal cron will invalidate variable cache
- every cron run, and this is a great performance problem if you have a
- frequently called task. Elysia cron optimize cache management, and doesn't
- need to invalidate cache.
- - Setup tasks that should be run at a precise time: for example if you want to
- send a SimpleNews newsletter every monday at 9:00AM, you can do it.
- - Parallel execution: if you have a task that takes a lot of time to execute,
- you can setup a different channel for it so it won't block other tasks that
- need to be executed every 5 minutes.
- - Turn off (disable) a cron task/feature you don't need.
- - Debug system cron problems. If your cron does not terminate correctly you can
- use extended logging, see at each cron timings and disable task to track down
- the problem.
- -----------------------------------------------------------------------------
- CHANNELS
- -----------------------------------------------------------------------------
- Channels are groups of tasks. Each channel is a "parallel line" of execution
- (= multiple channels can be executed simultaneously).
- Tasks inside a channel will be executed sequentially (if they should).
- WARNING: It's not recommended to create more than 2 or 3 channels.
- Every channel will increase the delay between each cron check (of the same
- channel), because each cron call will cycle between all channels.
- So, for example:
- If you have 1 channel it will be checked once a minute.
- If you have 2 channel each one will be checked every 2 minutes (almost usually,
- when the other one is running it will be checked once a minute).
- It you have 10 channels there will be a check every 10 minutes... if you have
- a job that should be executed every 5 minutes it won't do so!
- -----------------------------------------------------------------------------
- EXPORT VIA CTOOLS/FEATURES MODULE
- -----------------------------------------------------------------------------
- With 2.0 version of Elysia Cron you can use "Bulk Export" functionality of
- "Chaos Tools Suite" to export cron settings.
- To use it simply enable all modules, go to Structure > Bulk Exporter and
- select the tasks you want to export settings. You can also select all
- "elysia_cron" prefixed variables to export global options.
- Than generate the module.
- The generated code will set the new defaults of elysia cron settings. This way
- you can simply enable it to use them, but you are free to override them in
- the future using the normal settings page.
- Note that if you want to delete all overrides, and return to exported settings,
- you should do a "reset to defaults" from elysia cron settings page.
- You can also use "Features" module to create a Feature module will the settings
- you need.
- Note that if you want to delete the overridden settings it's preferable to use
- the "reset to defaults" elysia cron's button.
- You can use the "Revert components" Features's button, but this will reset also
- all cron statistics (if you are not interested in them you can freely use that
- button).
- -----------------------------------------------------------------------------
- DRUSH SUPPORT
- -----------------------------------------------------------------------------
- Elysia Cron 2.0 adds a simple support for Drush module.
- Run all cron tasks in all active modules for specified site using elysia cron
- system. This replaces the standard "core-cron" drush handler.
- Examples:
- elysia-cron run Run all cron tasks in all active
- modules (as the standard "core-cron")
- elysia-cron run --verbose Run all cron tasks in verbose mode
- elysia-cron run @channel Run all cron tasks in specified
- channel
- elysia-cron run search_cron --ignore-time Run only search index
- build task (force execution)
- elysia-cron list --elysia-cron-verbose List all channels/tasks
- in verbose mode
- elysia-cron disable search_cron Disable search index build task
- Options:
- --elysia-cron-verbose enable extended output (the same as
- --verbose, but without enabling drush
- verbose mode)
- --ignore-disable run channels/tasks even if disabled
- --ignore-running run channels/tasks even
- if already running
- --ignore-time run channels/tasks even if not ready
- for execution
- --quiet suppress all output
- --verbose enable extended output
- -----------------------------------------------------------------------------
- RULES AND SCRIPT SYNTAX
- -----------------------------------------------------------------------------
- 1. FIELDS ORDER
- ---------------------------------
- +---------------- minute (0 - 59)
- | +------------- hour (0 - 23)
- | | +---------- day of month (1 - 31)
- | | | +------- month (1 - 12)
- | | | | +---- day of week (0 - 6) (Sunday=0)
- | | | | |
- * * * * *
- Each of the patterns from the first five fields may be either * (an asterisk),
- which matches all legal values, or a list of elements separated by commas
- (see below).
- For "day of the week" (field 5), 0 is considered Sunday, 6 is Saturday (7 is
- an illegal value)
- A job is executed when the time/date specification fields all match the current
- time and date. There is one exception: if both "day of month" and "day of week"
- are restricted (not "*"), then either the "day of month" field (3) or the "day
- of week" field (5) must match the current day (even though the other of the two
- fields need not match the current day).
- 2. FIELDS OPERATOR
- ---------------------------------
- There are several ways of specifying multiple date/time values in a field:
- * The comma (',') operator specifies a list of values, for example: "1,3,4,7,8"
- * The dash ('-') operator specifies a range of values, for example: "1-6", which
- is equivalent to "1,2,3,4,5,6"
- * The asterisk ('*') operator specifies all possible values for a field. For
- example, an asterisk in the hour time field would be equivalent to 'every hour'
- (subject to matching other specified fields).
- * The slash ('/') operator (called "step") can be used to skip a given number of
- values. For example, "*/3" in the hour time field is equivalent to
- "0,3,6,9,12,15,18,21".
- 3. EXAMPLES
- ---------------------------------
- */15 * * * : Execute job every 15 minutes
- 0 2,14 * * *: Execute job every day at 2:00 and 14:00
- 0 2 * * 1-5: Execute job at 2:00 of every working day
- 0 12 1 */2 1: Execute job every 2 month, at 12:00 of first day of the month OR
- at every monday.
- 4. SCRIPTS
- ---------------------------------
- You can use the script section to easily create new jobs (by calling a php
- function) or to change the scheduling of an existing job.
- Every line of the script can be a comment (if it starts with #) or a job
- definition.
- The syntax of a job definition is:
- <-> [rule] <ctx:CONTEXT> [job]
- (Tokens betweens [] are mandatory)
- * <->: a line starting with "-" means that the job is DISABLED.
- * [rule]: a crontab schedule rule. See above.
- * <ctx:CHANNEL>: set the channel of the task.
- * [job]: could be the name of a supported job (for example: 'search_cron') or a
- function call, ending with ; (for example: 'process_queue();').
- A comment on the line just preceding a job definition is considered the job
- description.
- Remember that script OVERRIDES all settings on single jobs sections or channel
- sections of the configuration
- 5. EXAMPLE OF SCRIPT
- ---------------------------------
- # Search indexing every 2 hours (i'm setting this as the job description)
- 0 */2 * * * search_cron
- # I'll check for module status only on sunday nights
- # (and this is will not be the job description, see the empty line below)
- 0 2 * * 0 update_status_cron
- # Trackback ping process every 15min and on a channel called "net"
- */15 * * * * ctx:net trackback_cron
- # Disable node_cron (i must set the cron rule even if disabled)
- - */15 * * * * node_cron
- # Launch function send_summary_mail('test@test.com', false); every night
- # And set its description to "Send daily summary"
- # Send daily summary
- 0 1 * * * send_summary_mail('test@test.com', false);
- -----------------------------------------------------------------------------
- CREDITS
- -----------------------------------------------------------------------------
- Elysia cron is a part of the Elysia project (but could be used stand alone
- with no limitation).
- Developing is sponsored by :
- Void Labs s.n.c
- http://www.void.it
|