/dev/null"; // Registry order is dispatch order, so the table reads the way the cycle runs $cron_jobs = []; foreach (cronJobRegistry() as $job) { $cron_jobs[$job['name']] = $job; $cron_jobs[$job['name']]['row'] = null; } $sql = mysqli_query($mysqli, "SELECT * FROM cron_jobs"); while ($job_row = mysqli_fetch_assoc($sql)) { if (isset($cron_jobs[$job_row['cron_job_name']])) { $cron_jobs[$job_row['cron_job_name']]['row'] = $job_row; } } ?>
= escapeHtml($cron_command) ?>
| Job | Schedule | Last Run | Duration | Status | Next Run | Action |
|---|---|---|---|---|---|---|
|
= escapeHtml($job['label']) ?>
Disabled
= escapeHtml($job['description']) ?> cron/= escapeHtml($job['script']) ?>
|
= escapeHtml(cronJobScheduleDescription($schedule, $interval_minutes, $daily_at)) ?> |
= escapeHtml(cronJobTimeAgo($last_run_at)) ?>
= escapeHtml(date('M j, g:i A', strtotime($last_run_at))) ?> |
= $last_duration === null ? '-' : escapeHtml($last_duration) . 's' ?> |
= $status_badge ?>
9) { ?>
= escapeHtml($last_status) ?> |
= $next_run === null ? '-' : escapeHtml(cronJobTimeAgo($next_run)) ?> |
|
Run Now does not start the job in your browser - it asks the dispatcher to pick it up on its next pass, so a job starts within a minute and still runs on the command line with the same locking as a scheduled run. Detailed per-job output is in App Logs.