Schedule-it keeps your site's scheduled jobs in the repository. The host runs one cron entry every minute, and that entry works out which jobs are due and runs them:
* * * * * php craft schedule-it/run
The schedule is config/schedule-it.php, so it is reviewed like any other code, it is the same
on every environment that deploys the commit, and a new environment gets every job the moment
that one entry exists — instead of jobs living only in a hosting dashboard, invisible to the
repository and missing wherever someone forgot to re-add them.
Write jobs in words or as cron expressions
Job::command('gc/run')->dailyAt('03:00') and ->weekdays()->at('08:30') sit beside plain
cron expressions, with a description, a timezone or a per-environment switch where you need
one. craft schedule-it/list shows every job, the expression it became and when it is next due.
Failures are reported, never swallowed
- Jobs run through
craft, with an absolute path, because cron does not promise a working directory. - Every job's stdout and stderr go to the log file, and are replayed to the runner's output for hosts whose task runner throws its filesystem away.
schedule-it/runreports each job's exit code and exits non-zero if any failed.- A misspelt key, a bad expression or an unknown timezone is an error, never a job that silently does not run.
- It refuses a lock that other servers cannot see, so a job never runs twice at once across a cluster.
Console-only: the web app has no route to the runner. Built on omnilight/yii2-scheduling, with the defaults that library needs under Craft already applied.
To install this plugin, copy the command above to your terminal.
This plugin doesn't have any reviews.


