Skip to content

Commands and scheduled work ​

Run PHP and Artisan through Sail in the local project. In production, run the same Artisan command through the configured application runtime. Use artisan list and artisan <command> --help to check available options.

Application commands ​

CommandPurpose and options
skuul:refresh-demoDestructively reset the application database when demo mode is enabled. No dry-run option. See demo isolation.
skuul:initInteractive installation. It changes installation data.
skuul:create-super-adminCreate a platform administrator interactively.
skuul:updateInstall the newest configured GitHub release. --check only checks availability; --no-backup skips backup.
skuul:backupBack up the database. --with-files requests files; --keep-old skips retention removal.
skuul:rehearse-restoreRestore into an isolated connection. --file selects a backup; --into selects the connection; --check-only inspects without restoring.
skuul:check-backupCheck backup freshness and the most recent completed restore rehearsal.
skuul:release-readinessCheck recorded release configuration. --check-backups also checks backup and rehearsal freshness.
skuul:bring-invoices-into-booksPost older invoices into the ledger. --school restricts it to one campus.
skuul:prune-expired-invitationsRevoke expired unused account invitations.
skuul:process-library-holdsExpire uncollected library holds and advance the queue.
skuul:process-noticesPublish due notices and expire finished notices.
skuul:end-leavers-accessEnd campus access for staff whose last day has passed.
skuul:advance-academic-calendarOpen due scheduled periods. --dry-run lists proposed openings.
skuul:generate-upcoming-cyclesDraft upcoming academic cycles. --dry-run lists proposed drafts.
skuul:send-academic-calendar-remindersSend start and closure reminders. --dry-run lists them without sending.
skuul:send-syllabus-behind-remindersSend weekly syllabus progress reminders. --dry-run lists them without sending.

Review the target records before running a command that changes data. The legacy invoice-posting command is an operator task, not a normal payment action. An updater invocation can install a different release line. Read updating before using it on development code.

Schedule ​

Run the scheduler every minute. The following schedule comes from routes/console.php. Times use the application's scheduler time zone, currently UTC.

Interval or timeWork
Every minuteCache scheduler heartbeat and enqueue the queue-worker heartbeat.
HourlyPrune expired invitations. Reset the demo database only when demo mode is enabled.
Every fifteen minutesProcess scheduled and expiring notices.
Daily 00:15End campus access for staff leavers.
Daily 00:30Open due scheduled academic periods.
Daily 01:30Back up database and requested files.
Daily 06:00Expire library holds and advance reservations.
Daily 07:00Check backup and completed rehearsal freshness.
Daily 07:15Send academic calendar reminders.
Monday 01:00Generate upcoming draft academic cycles.
Monday 07:30Send syllabus progress reminders.
Sunday 03:00Run the configured restore rehearsal.
DailyPrune failed jobs and old batches after 336 hours.

Most scheduled work uses one-server locks; overlapping long-running work is also prevented where configured. These locks need a shared cache across application instances. Heartbeats allow health monitoring to detect a stopped scheduler or worker. Calendar advancement opens periods. It never closes them automatically.

Inspect scheduled and queued work ​

sh
vendor/bin/sail artisan schedule:list
vendor/bin/sail artisan queue:failed
vendor/bin/sail artisan skuul:advance-academic-calendar --dry-run
vendor/bin/sail artisan skuul:generate-upcoming-cycles --dry-run
vendor/bin/sail artisan schedule:list
vendor/bin/sail artisan queue:failed
vendor/bin/sail artisan skuul:advance-academic-calendar --dry-run
vendor/bin/sail artisan skuul:generate-upcoming-cycles --dry-run

Review the queue and application logs before retrying failed work. See operations, deployment, and troubleshooting.