CronPlugins

Sometimes you may wish your plugin to do things without user interaction - for example, database optimisation or log rotation. For this, Elgg has a cron endpoint.

Cron is a unix tool which executes commands at a specific time of day (other operating systems have similar tools). This keys off a file called a crontab - an example is given file is included and called crontab.example.

The crontab calls simplified yet powerful cron endpoint - http://yoursite/pg/cron/PERIOD, where PERIOD is one of the following:

   * reboot - Execute on system reboot
   * minute - Execute every minute
   * fiveminute - Execute every five minutes
   * fifteenmin - Execute every fifteen minutes
   * halfhour - Execute every half hour
   * hourly - Execute once every hour
   * daily - Execute every day
   * weekly - Execute weekly
   * monthly - Execute once a month
   * yearly - Execute every year

When these endpoints are triggered by your crontab a plugin hook is triggered. To make use of this, register a plugin hook as follows:

   register_plugin_hook('cron', PERIOD, ‘my_cron_handler’);

Where PERIOD is one of the key words listed above. Here is some sample code using Cron.

<?php
    /**
    * Elgg log rotator.
    *
    * @package ElggLogRotate
    * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
    * @author Curverider Ltd
    * @copyright Curverider Ltd 2008
    * @link http://elgg.com/
    */
 
    /**
    * Initialise the plugin.
    *
    */
    function logrotate_init()
    {
    $period = get_plugin_setting('period','logrotate');
    switch ($period)
    {
    case 'weekly':
    case 'monthly' :
    case 'yearly' :
    break;
    default: $period = 'monthly';
    }
 
    // Register cron hook
    register_plugin_hook('cron', $period, 'logrotate_cron');
    }
 
    /**
    * Trigger the log rotation.
    *
    */
    function logrotate_cron($hook, $entity_type, $returnvalue, $params)
    {
    $resulttext = elgg_echo("logrotate:logrotated");
    if (!archive_log())
    $resulttext = elgg_echo("logrotate:lognotrotated");
 
    return $returnvalue . $resulttext;
    }
 
    // Initialise plugin
    register_elgg_event_handler('init','system','logrotate_init');
    ?>

See also

Search docs