Version 2.1.1
October 23, 2026
Changed
- New plugin icon: a white glyph on a black circle, with a white icon mask for the control panel nav.
Version 2.1.0
October 20, 2026
Added
Job::exec('<shell line>'), or a list entry withexecin place ofcommand, runs a shell command from the project root with the same log, output, lock and exit-code handling as a console command. (#2)->background(), or'background' => true, runs a job as its own process (schedule-it/run/job) so the jobs after it do not wait. It takes the job's lock itself and writes its output and result to the log file. (#1)schedule-it/listshows the command beneath a job's description, each job's next run in Craft's timezone as well as its own, and whether it runs in turn or in the background. (#2)
Changed
- Each job's lock is taken just before it runs and released as soon as it ends. It used to be taken for every due job before the first one ran, so one long job held back every other job due with it, and runners in later minutes skipped them. (#1)
- The minute a job was started is recorded in Craft's cache, so a second runner in the same minute skips a job the first has already run.
schedule-it/runreports a skipped job (– … skipped: …) instead of leaving it out.- Job output is read from the job's process as it is written, so two runners sharing a log file never print each other's output.
- The library's
withoutOverlapping()andonOneServer()do nothing on a job (every job is already locked), and askip()added inconfigureno longer replaces the lock. - Expressions stay in UTC by default.
Version 2.0.1
October 19, 2026
Changed
- Plugin Store metadata: developer URL, changelog URL, authors and an icon.
- Licence file renamed to
LICENSE.txt(MIT).
Version 2.0.0
October 2, 2026
- Renamed from
webdna/scheduler(handlescheduler) towebdna/schedule-it(handleschedule-it). The Plugin Store already lists Verbb's Scheduler under the handlescheduler, and Craft's update check matches plugins by handle, so every install was offered that plugin's updates in the control panel. - The schedule moves to
config/schedule-it.php, the commands toschedule-it/runandschedule-it/list, the namespace towebdna\\scheduleit, and the default log file tostorage/logs/schedule-it.log. The plugin keeps nothing in the database, so moving is uninstall the old, install the new — see the README. schedule-it/runandschedule-it/listrefuse to start while the schedule is still inconfig/scheduler.phpandconfig/schedule-it.phpdoes not exist, rather than running nothing.craft scheduler/runfails with a pointer toschedule-it/runonce the old plugin is gone.
Version 1.0.1
September 30, 2026
craft schedule/runnow fails with a pointer toscheduler/run. The underlying library registersschedule/runon every console app through Yii's extension bootstrap, where it ran an empty schedule and exited 0 — so a cron entry left on the old command reported success every minute while running nothing. Aschedulecommand a project configured itself is left alone.
Version 1.0.0
September 30, 2026
- Initial release: the schedule in
config/scheduler.php, run by onescheduler/runcron entry. - Jobs can be written in words —
Job::command('gc/run')->dailyAt('03:00'),->weekdays()->at('08:30')— or as cron expressions, side by side. - Jobs default to UTC, a cross-server lock, stdout and stderr in the log file, and replay of that output to the runner's stdout.
scheduler/runreports each job's exit code and exits non-zero if any failed, and refuses to start on a file or null mutex unlesssingleServeris set.scheduler/listshows every job and its next due time.- A misspelt key, bad expression or unknown timezone in the schedule is an error, never a job that silently does not run.