Supervisor Management
Use Vortos-managed supervisor blocks for package workers.
Supervisor Management
vortos:worker:install writes managed worker blocks to the configured supervisor file. By default, the path is:
docker/worker/supervisord.confList Workers
php bin/console vortos:worker:listThe command shows the worker name, command, and description for every worker contributed by installed packages.
Install Workers
Install all registered workers:
php bin/console vortos:worker:installInstall selected workers:
php bin/console vortos:worker:install --worker=aws-ses-outbox-relay
php bin/console vortos:worker:install --worker=aws-ses-outbox-relay --worker=object-store-outbox-relayWrite to a non-default supervisor path:
php bin/console vortos:worker:install --path=docker/worker/programs/vortos.confPreview:
php bin/console vortos:worker:install --dry-runRemove Workers
php bin/console vortos:worker:remove aws-ses-outbox-relay
php bin/console vortos:worker:remove aws-ses-outbox-relay object-store-outbox-relay
php bin/console vortos:worker:remove aws-ses-outbox-relay --dry-runManaged Block Model
The command owns only Vortos-managed worker blocks. Existing supervisor daemon settings, custom programs, and non-Vortos sections are preserved.
This means teams can keep hand-written custom workers next to generated package workers without losing local config.
Install does not reload supervisor
The command updates files. It does not call supervisorctl reread, supervisorctl update, or restart containers. Process reload is deployment-specific and stays explicit.
Example Generated Program
[program:aws-ses-outbox-relay]
command=php /var/www/html/bin/console vortos:ses:outbox:relay
autostart=true
autorestart=true
startsecs=3
stopwaitsecs=30
stdout_logfile=/var/log/supervisor/aws-ses-outbox-relay.out.log
stderr_logfile=/var/log/supervisor/aws-ses-outbox-relay.err.logDeployment Pattern
- Install or update workers in source-controlled supervisor config.
- Review the diff.
- Deploy code and config.
- Reload supervisor or restart the worker container.
- Verify the process is running.
- Watch package-specific lag metrics.
For Docker Compose:
docker compose restart workerInside a running supervisor container:
supervisorctl reread
supervisorctl update
supervisorctl statusRootless supervisor in the deploy-in-image model
In the deploy-in-image (RideColor) model one image serves every role and runs as the image's non-root user. supervisord must therefore be configured rootless — a [supervisord] user=root directive, or a pidfile/socket/log under a root-owned directory (/var/run, /var/log/supervisor), makes it try to drop privileges as a non-root user and crash-loop with Error: Can't drop privilege as nonroot user.
A rootless config has no user=, keeps its pidfile and admin socket under /tmp, and logs to stdout. A canonical template ships with vortos-deploy at Resources/worker/supervisord.rootless.conf — copy it into your image or base your own on it.
Caught before the box
RootlessWorkerCheck fails deploy:doctor closed if the active worker config is rootful in the single-image model, so a misconfigured supervisord is caught during preflight rather than crash-looping the worker color at cutover.