Console commands
Each mounted module keeps its own console commands, and Showtime adds one of its own for deploys. All of them are routed under the module’s handle exactly as they are standalone.
Showtime
showtime/migrate/all
php craft showtime/migrate/all
Brings every mounted module’s schema up to date. For each module it works out which of three situations it is in — installed standalone (adopt, then migrate), already migrated under Showtime (migrate), or brand new (install) — and does the right thing.
You need this because Craft’s own migrate/all only knows about installed plugins, and the mounted modules deliberately aren’t. It is idempotent, so put it in your deploy script unconditionally:
composer install --no-dev --optimize-autoloader
php craft up
php craft showtime/migrate/all
php craft clear-caches/all
In practice each Showtime release also ships a thin sync migration that does the same work during craft up, so this is belt-and-braces — it costs nothing and removes the question.
Owl — events
owl/maintenance/regenerate
php craft owl/maintenance/regenerate
php craft owl/maintenance/regenerate --queue
Recurring events are materialised into an indexed occurrence table up to a rolling horizon (24 months by default). This command rolls that horizon forward, so open-ended recurrence rules keep extending into the future. Non-recurring events are skipped — their single occurrence never changes with time.
Add --queue to push each event’s regeneration onto Craft’s queue rather than running it inline. Recommended once you have a lot of recurring events.
Run this from cron. Without it, a “every Tuesday, forever” event simply stops appearing once the site passes the horizon it was last generated to.
Headcount — memberships
headcount/subscriptions/expire
php craft headcount/subscriptions/expire
Marks subscriptions that have passed their period end as expired, and applies the user-group changes that go with it. Run daily.
headcount/subscriptions/sync
php craft headcount/subscriptions/sync
Reconciles local subscription state against the payment gateway — the safety net for webhooks that were missed while the site was down.
headcount/sync/plans and headcount/sync/status
php craft headcount/sync/plans # push local plans to Stripe Prices
php craft headcount/sync/status # report what is and isn't in sync
A complete crontab
# Craft's queue runner, if you're not using the web-triggered one
* * * * * cd /path/to/project && php craft queue/run >> /dev/null 2>&1
# Roll the recurring-event horizon forward
0 3 * * * cd /path/to/project && php craft owl/maintenance/regenerate --queue >> /dev/null 2>&1
# Membership housekeeping
0 4 * * * cd /path/to/project && php craft headcount/subscriptions/expire >> /dev/null 2>&1
15 4 * * * cd /path/to/project && php craft headcount/subscriptions/sync >> /dev/null 2>&1
Why the commands aren’t namespaced under showtime/
Because they are the modules’ own commands, unchanged. Mounting sets up actions/<handle>/… routing and the console controller namespace for each module, so owl/maintenance/regenerate resolves whether Owl is a standalone plugin or a Showtime module. Any deploy script, cron entry, or runbook you already have keeps working after adoption — which was the point.