Sometimes things need to be done 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
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 – in this case it is taken from the system log rotation module I added to SVN today.
* 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.
$period = get_plugin_setting('period','logrotate');
case 'monthly' :
case 'yearly' :
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");
$resulttext = elgg_echo("logrotate:lognotrotated");
return $returnvalue . $resulttext;
// Initialise plugin