ultimate_cron.drush.inc in Ultimate Cron 8
Same filename and directory in other branches
Drush commands for Ultimate Cron!
File
ultimate_cron.drush.incView source
<?php
/**
* @file
* Drush commands for Ultimate Cron!
*/
/**
* Implements hook_drush_command().
*/
function ultimate_cron_drush_command() {
$items = array();
$items['cron-list'] = array(
'description' => "List cron jobs.",
'arguments' => array(
'type' => 'The type of jobs to list (all, running, enabled, disabled, unsafe)',
),
'options' => array(
'module' => 'Only show jobs from comma separated list of modules',
),
'examples' => array(
'drush cron-list running',
),
'aliases' => array(
'cl',
),
);
$items['cron-run'] = array(
'description' => "Run cron job.",
'arguments' => array(
'function' => 'Function to run',
),
'options' => array(
'cli' => "Don't spawn a background process through http",
'check-rule' => "Check rule to determine if job should run",
'logfile' => "File to log to when spawning cli processes",
),
'examples' => array(
'drush cron-run node_cron',
),
'aliases' => array(
'cr',
),
);
$items['cron-enable'] = array(
'description' => "Enable cron job.",
'arguments' => array(
'function' => 'Function to enable',
),
'examples' => array(
'drush cron-enable node_cron',
),
'aliases' => array(
'ce',
),
);
$items['cron-disable'] = array(
'description' => "Disable cron job.",
'arguments' => array(
'function' => 'Function to disable',
),
'examples' => array(
'drush cron-disable node_cron',
),
'aliases' => array(
'cd',
),
);
$items['cron-unlock'] = array(
'description' => "Unlock cron job.",
'arguments' => array(
'function' => 'Function to unlock',
),
'examples' => array(
'drush cron-unlock node_cron',
),
'aliases' => array(
'cu',
),
);
return $items;
}
/**
* Implements hook_drush_help().
*/
function ultimate_cron_drush_help($section) {
switch ($section) {
case 'drush:cron-list':
return dt("This command will list cron jobs.");
case 'drush:cron-run':
return dt("This command will run a cron job.");
case 'drush:cron-enable':
return dt("This command will enable a cron job.");
case 'drush:cron-disable':
return dt("This command will disable a cron job.");
case 'drush:cron-unlock':
return dt("This command will unlock a cron job.");
}
}
/**
* List cron jobs.
*/
function drush_ultimate_cron_cron_list($type = 'all') {
$module = drush_get_option('module');
$module = $module ? explode(",", $module) : array();
// Get hooks and their data
$hooks = ultimate_cron_get_hooks();
$data = _ultimate_cron_preload_cron_data();
$jobs = array();
$modules = array();
foreach ($hooks as $function => $hook) {
if (!$module || $module == $hook['module']) {
$modules[$hook['module']][$function] = $hook;
}
}
foreach ($hooks as $function => &$hook) {
if ($module && !in_array($hook['module'], $module)) {
continue;
}
$hook['settings'] = $data[$function]['settings'] + $hook['settings'];
$hook['background_process'] = $data[$function]['background_process'];
$hook['log'] = ultimate_cron_get_log($function);
switch ($type) {
case 'enabled':
if (!empty($hook['settings']['enabled'])) {
$jobs[] = $hook;
}
break;
case 'disabled':
if (empty($hook['settings']['enabled'])) {
$jobs[] = $hook;
}
break;
case 'running':
if (!empty($data[$hook['function']]['background_process'])) {
$jobs[] = $hook;
}
break;
case 'unsafe':
if (!empty($hook['unsafe'])) {
$jobs[] = $hook;
}
break;
case 'failed':
if (isset($hook['log']['status']) && empty($hook['log']['status'])) {
$jobs[] = $hook;
}
break;
case 'all':
default:
$jobs[] = $hook;
}
}
$table = array();
$table[] = array(
'',
dt('Module'),
dt('Function'),
dt('Rules'),
dt('Start'),
dt('Duration'),
);
foreach ($jobs as $hook) {
$legend = '';
if (!empty($hook['background_process'])) {
$legend .= 'R';
$hook['log']['start'] = $hook['background_process']->start;
$hook['log']['end'] = microtime(TRUE);
}
if (empty($hook['settings']['enabled'])) {
$legend .= 'D';
}
$start = isset($hook['log']['start']) ? format_date((int) $hook['log']['start'], 'custom', 'Y-m-d H:i:s') : dt('N/A');
$end = isset($hook['log']['end']) ? gmdate('H:i:s', (int) ($hook['log']['end'] - $hook['log']['start'])) : dt('N/A');
$rules = $hook['settings']['rules'];
$table[] = array(
$legend,
$hook['module'],
$hook['function'],
implode("\n", $rules),
$start,
$end,
);
}
drush_print_table($table);
}
/**
* Run cron job(s)
*/
function drush_ultimate_cron_cron_run($function = NULL) {
$cli = drush_get_option('cli');
$check_rule = drush_get_option('check-rule');
$logfile = drush_get_option('logfile');
$logfile = is_string($logfile) ? $logfile : '/dev/null';
// Get global options
$options = drush_get_context('cli');
$cmd_options = '';
// Determine new parameter string for sub-requests
$passthru = array(
'root',
'php',
'uri',
'simulate',
);
foreach ($options as $key => $option) {
if (in_array($key, $passthru)) {
$cmd_options .= ' --' . $key . '=' . escapeshellarg($option);
}
}
if ($function == 'all') {
if ($cli) {
$hooks = ultimate_cron_get_hooks();
$schedule = ultimate_cron_get_schedule($hooks);
foreach ($schedule as $function => $hook) {
if (!empty($options['simulate'])) {
// Dry-run ...
drush_print(dt('[!function]: Simulated launch @ !ts', array(
'!ts' => date('Y-m-d H:i:s'),
'!function' => $function,
)));
continue;
}
drush_print(dt('[!function]: Launching @ !ts', array(
'!ts' => date('Y-m-d H:i:s'),
'!function' => $function,
)));
// Launch the sub-request
$cmd = $_SERVER['SCRIPT_FILENAME'] . " {$cmd_options} cron-run {$function} --cli " . ($check_rule ? '--check-rule' : '');
exec("{$cmd} >> " . escapeshellarg($logfile) . " 2>&1 &");
}
drush_print(dt('[!ts] Launced !jobs jobs', array(
'!ts' => date('Y-m-d H:i:s'),
'!jobs' => count($schedule),
)));
// Update drupals cron timestamp, but don't clear the cache for all variables!
if (empty($options['simulate'])) {
$name = 'cron_last';
$value = time();
global $conf;
db_merge('variable')
->key(array(
'name' => $name,
))
->fields(array(
'value' => serialize($value),
))
->execute();
$conf[$name] = $value;
}
return;
}
else {
if (empty($options['simulate'])) {
ultimate_cron_cron_run(TRUE);
}
$messages = drupal_get_messages();
if (!empty($messages['status'])) {
foreach ($messages['status'] as $message) {
drush_print(strip_tags($message));
}
}
return;
}
}
$hooks = ultimate_cron_get_hooks();
if (!isset($hooks[$function])) {
return drush_set_error(dt('[!function]: not found', array(
'!function' => $function,
)));
}
$hook =& $hooks[$function];
// When run manually don't double check the rules
if (drush_get_option('check-rule')) {
$hook['log'] = ultimate_cron_get_log($function);
if (!ultimate_cron_hook_should_run($hook)) {
drush_print(dt("[!function]: not sceduled to run at this time", array(
'!function' => $function,
)));
return;
}
}
else {
$hook['skip_catch_up'] = TRUE;
}
if (!empty($options['simulate'])) {
// Dry-run ...
drush_print("[{$function}]: Simulated run");
return;
}
if ($cli) {
$start = microtime(TRUE);
$result = ultimate_cron_run_hook_cli($function, $hook);
}
else {
$result = ultimate_cron_run_hook($function, $hook);
}
if ($result === FALSE) {
return drush_set_error(dt('[!function]: could not start (already running?)', array(
'!function' => $function,
)));
}
if ($cli) {
$log = ultimate_cron_get_log($function);
if ($log['start'] >= $start && !empty($log['msg'])) {
drush_print("[{$function}]: " . $log['msg']);
}
return $result ? NULL : drush_set_error(dt('[!function]: could not start (service unavailable)', array(
'!function' => $function,
)));
}
if ($result === NULL) {
return drush_set_error(dt('[!function]: could not start (service unavailable)', array(
'!function' => $function,
)));
}
else {
drush_print(dt('!function started', array(
'!function' => $function,
)));
}
}
/**
* Enable a cron job
*/
function drush_ultimate_cron_cron_enable($function) {
$hooks = ultimate_cron_get_hooks();
if (!isset($hooks[$function])) {
return drush_set_error(dt('"!function" not found', array(
'!function' => $function,
)));
}
$conf = ultimate_cron_get_settings($function);
$conf['enabled'] = TRUE;
ultimate_cron_set_settings($function, $conf);
drush_print(dt('!function enabled', array(
'!function' => $function,
)));
}
/**
* Disable a cron job
*/
function drush_ultimate_cron_cron_disable($function) {
$hooks = ultimate_cron_get_hooks();
if (!isset($hooks[$function])) {
return drush_set_error(dt('"!function" not found', array(
'!function' => $function,
)));
}
$conf = ultimate_cron_get_settings($function);
$conf['enabled'] = FALSE;
ultimate_cron_set_settings($function, $conf);
drush_print(dt('!function disabled', array(
'!function' => $function,
)));
}
/**
* Unlock a cron job
*/
function drush_ultimate_cron_cron_unlock($function) {
$hooks = ultimate_cron_get_hooks();
if (!isset($hooks[$function])) {
return drush_set_error(dt('"!function" not found', array(
'!function' => $function,
)));
}
$handle_prefix = variable_get('ultimate_cron_handle_prefix', ULTIMATE_CRON_HANDLE_PREFIX);
$handle = $handle_prefix . $function;
if ($process = background_process_get_process($handle)) {
// Unlock the process
if (background_process_remove_process($process->handle, $process->start)) {
drush_print(dt('Process for !function unlocked (process handle: !handle)', array(
'!handle' => $handle,
'!function' => $function,
)));
module_invoke_all('background_process_shutdown', $process, FALSE, t('Manually unlocked'));
}
}
else {
drush_set_error(dt('Process for !function not found (process handle: !handle)', array(
'!handle' => $handle,
'!function' => $function,
)));
}
}
Functions
Name | Description |
---|---|
drush_ultimate_cron_cron_disable | Disable a cron job |
drush_ultimate_cron_cron_enable | Enable a cron job |
drush_ultimate_cron_cron_list | List cron jobs. |
drush_ultimate_cron_cron_run | Run cron job(s) |
drush_ultimate_cron_cron_unlock | Unlock a cron job |
ultimate_cron_drush_command | Implements hook_drush_command(). |
ultimate_cron_drush_help | Implements hook_drush_help(). |