Manage Supervisor processes from Plesk with admin, reseller, and customer scoped access.
Supervisor Manager is a Plesk extension for creating and managing Supervisor programs directly from the Plesk interface.
It is built for hosting panels where admins need to run background commands for individual domains while keeping customers locked to their own domain scope. It can manage PHP workers, Node workers, queue consumers, schedulers, websocket servers, custom scripts, and other long-running services.
- Name: Ghost Compiler
- Email: hello@ghostcompiler.in
- GitHub: ghostcompiler/supervisor-manager
- Profile: github.com/ghostcompiler
- Run queue workers and background consumers.
- Run Node, PHP, Python, or shell-based worker processes.
- Manage websocket servers, schedulers, bots, daemons, and custom long-running commands.
- Let customers restart only the processes assigned to their domains.
- Give admins a single Plesk page for status, config generation, restart controls, and live logs.
- Keep Supervisor config files generated consistently under
/etc/supervisor/conf.d.
Open the full GitHub Pages documentation site:
Supervisor Manager Documentation
- Admin dashboard for all managed Supervisor programs.
- Customer and reseller scoped access by assigned Plesk domain.
- Add, edit, delete, start, stop, restart, and regenerate config.
- Live log preview with pause/resume and 120/300/500 line views.
- Automatic Supervisor config generation.
- Project root locking so users cannot escape their domain area.
- Project root validation for domain-owned applications.
- Runtime PATH handling for Plesk PHP, Plesk Node.js, and system binaries.
- Generated config and log paths shown in the UI.
- One-click Supervisor install on supported Linux distributions.
- Plesk Onyx or Obsidian on Linux.
- PHP available to Plesk admin runtime.
- Supervisor installed, or an OS supported by the install button.
- Required runtime installed for the command you want to run, such as PHP, Node.js, Python, or another CLI binary.
Supported install detection includes:
- Ubuntu / Debian
- AlmaLinux / Rocky / RHEL / CentOS / Fedora
Install the latest runner-built package directly from GitHub:
plesk bin extension --install-url https://github.com/ghostcompiler/supervisor-manager/releases/download/latest/supervisor-manager.zipThis URL points to the rolling latest release asset. The Package Latest workflow rebuilds supervisor-manager.zip from the current main branch on every push and whenever it is started manually, so the install command stays stable and does not depend on a hardcoded version number.
Pinned version installs are also available after publishing a versioned release:
plesk bin extension --install-url https://github.com/ghostcompiler/supervisor-manager/releases/download/v1.0.3/supervisor-manager-1.0.3.zipBuild the extension ZIP:
mkdir -p build
COPYFILE_DISABLE=1 zip -r build/supervisor-manager-1.0.3.zip meta.xml DESCRIPTION.md CHANGES.md README.md htdocs plib sbin -x '*.DS_Store' -x '__MACOSX/*'Install through Plesk CLI:
plesk bin extension --install build/supervisor-manager-1.0.3.zipOr install through Plesk UI:
- Open Plesk Admin.
- Go to Extensions.
- Click Upload Extension.
- Upload
build/supervisor-manager-1.0.3.zip. - Open Supervisor from the Plesk sidebar.
Version 1.0.3 improves Supervisor runtime setup, domain PHP detection, and log handling. It adds service health diagnostics with a repair action, generates domain-scoped Supervisor program names, resolves php through the selected Plesk domain PHP handler, and adds copy/clear controls for live logs.
After installing:
- Open Supervisor from Plesk.
- Use Repair Supervisor if the service or socket needs setup.
- Regenerate existing program configs so domain PHP paths and scoped names are written.
- Restart affected programs from the extension.
- Use Copy Log or Clear Log from the logs page when troubleshooting.
When an authorized user saves a program, the extension:
- Validates the selected domain.
- Locks the project root to the selected domain area.
- Generates a Supervisor config file.
- Writes the config to
/etc/supervisor/conf.d. - Runs
supervisorctl rereadandsupervisorctl update. - Shows status, config path, log path, and live logs in Plesk.
Example queue worker:
Supervisor Program Name: queue-worker
Display Name: Queue Worker
Assigned Domain: example.com
Command: php artisan queue:work --sleep=3 --tries=3
Project Root: /var/www/vhosts/example.com/app
Start on boot: enabled
Restart if it exits: enabled
Enabled: enabled
Example Node worker:
Supervisor Program Name: realtime-worker
Display Name: Realtime Worker
Assigned Domain: example.com
Command: npm run worker
Project Root: /var/www/vhosts/example.com/realtime-app
Example custom script:
Supervisor Program Name: importer
Display Name: Product Importer
Assigned Domain: example.com
Command: /usr/bin/python3 worker.py
Project Root: /var/www/vhosts/example.com/importer
Set Project Root to the application folder where the command should run. For Laravel commands, this is usually the folder containing artisan. For Node.js commands, this is usually the folder containing package.json.
Supervisor configs:
/etc/supervisor/conf.d/plesk-*.confRHEL-style fallback path:
/etc/supervisord.d/plesk-*.confProgram logs:
/var/log/supervisor/plesk/*.logExtension data:
/usr/local/psa/var/modules/supervisor-manager/data/programs.jsonPrivileged helper:
/usr/local/psa/admin/sbin/modules/supervisor-manager/supervisor-manager- Admins can create, edit, delete, and regenerate all programs.
- Customers and resellers can only see programs assigned to domains they can access.
- Customer and reseller access is controlled by Plesk service plan permissions.
- If Plesk delays exposing custom access/manage permission values after a plan change, a non-zero Maximum Supervisor programs limit is treated as a guarded activation fallback for domains the user already owns or can access.
- Project roots are locked to the selected domain area.
- Users cannot use
../style path escapes to reach another domain. - Server-level writes are performed through the Plesk
sbinhelper. - The
sbinhelper revalidates config paths, log paths, process users, and allowed project roots before touching server files. - Managed commands run as the selected domain system user. Only grant Manage Supervisor programs to users who are trusted to run commands for that subscription.
Supervisor Manager adds permissions to Plesk service plans and subscriptions. Keep them disabled by default, then enable only what each reseller or customer should be allowed to do.
Available permissions:
- Supervisor Manager access: allows the user to open the extension and view assigned programs.
- Manage Supervisor programs: allows creating, editing, deleting, and regenerating configs for enabled domains.
- Control Supervisor programs: allows start, stop, and restart actions.
- View Supervisor logs: allows opening the live log preview.
Available limit:
- Maximum Supervisor programs: caps how many programs can be created per subscription. Use
0to prevent customer-created programs, a positive number for a fixed cap, or-1for unlimited.
Avoid unlimited process counts for shared-hosting customers unless they are trusted. Background programs can consume CPU, RAM, and ports just like commands run over SSH.
Access is checked in three layers:
- The logged-in user must have access to the Plesk domain.
- The domain subscription must have the matching Supervisor Manager permission enabled.
- The posted program must belong to that exact domain ID, not a parent domain or a similar subdomain.
After changing an existing service plan, sync the affected subscriptions in Plesk. Customized or locked subscriptions may keep their old permission values until they are synced or adjusted directly.
The extension always registers its Plesk sidebar and domain buttons so service plan changes can appear without waiting for a new domain event. Security is still enforced in the controller after the button is clicked.
Domain buttons are normalized to site_id, because Plesk context parameters can include dom_id for the subscription/webspace and site_id for the exact domain. Supervisor Manager uses the exact domain ID for filtering and actions.
The log page opens in a new tab and provides:
- Auto refresh every 2.5 seconds.
- Pause and resume.
- Last update timestamp.
- 120, 300, and 500 line views.
- Direct reading from
/var/log/supervisor/plesk/*.log.
Check Supervisor:
supervisorctl statusReread generated configs:
supervisorctl reread
supervisorctl updateCheck generated files:
ls -lah /etc/supervisor/conf.d/
ls -lah /var/log/supervisor/plesk/Install Supervisor on Ubuntu manually:
sudo DEBIAN_FRONTEND=noninteractive apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y supervisor
sudo systemctl enable --now supervisorCheck a runtime binary:
which php
which node
which python3Open Logs. The most common causes are:
- Wrong project root.
- Missing command runtime, such as PHP, Node.js, or Python.
- Missing application file, such as
artisan,package.json, or the script passed to the command. - Port already in use.
- Command exits immediately.
Set Project Root to the folder where the command normally runs over SSH.
cd /var/www/vhosts/example.com/app
ls -lahFor example:
- Laravel commands usually run from the folder containing
artisan. - Node.js commands usually run from the folder containing
package.json. - Python or shell workers usually run from the folder containing the script file.
Install the missing runtime or use the full binary path in the command. Examples:
which php
which node
which python3If the managed application binds to a port and the port is already busy, stop the duplicate process or change the application port.
The extension returns to the manager page and shows a success or error message at the top. If the browser is still on the form page, refresh once and check the manager page again.
Validate PHP syntax:
find . -name '*.php' -o -name '*.phtml' | sort | xargs -n1 php -lPackage:
mkdir -p build
COPYFILE_DISABLE=1 zip -r build/supervisor-manager-1.0.3.zip meta.xml DESCRIPTION.md CHANGES.md README.md htdocs plib sbin -x '*.DS_Store' -x '__MACOSX/*'GitHub Actions handles packaging and release assets:
CIruns on every push and pull request.CIvalidates PHP syntax, validatesmeta.xml, builds the ZIP, tests the ZIP, and uploads it as a workflow artifact.Package Latestruns on every push tomainand can be started manually.Package Latestmoves the rollinglatesttag to the current commit and uploadssupervisor-manager.zipto that release.Releaseruns when a tag likev1.0.3is pushed, or when started manually.Releaserequires the tag version to matchmeta.xml.Releaseuploads versioned assets likesupervisor-manager-1.0.3.zipfor pinned installs.
Refresh the rolling latest installer from the current main branch:
git push origin mainThen install the newest runner-built package:
plesk bin extension --install-url https://github.com/ghostcompiler/supervisor-manager/releases/download/latest/supervisor-manager.zipCreate a release:
git tag v1.0.3
git push origin v1.0.3After the release workflow finishes, the pinned install command works:
plesk bin extension --install-url https://github.com/ghostcompiler/supervisor-manager/releases/download/v1.0.3/supervisor-manager-1.0.3.zipInstall locally on Plesk:
plesk bin extension --install build/supervisor-manager-1.0.3.zipPrivate project. Update this section before publishing publicly.
Proudly developed by Ghost Compiler.
Built using ServBay
- Mac M4 Tested
- macOS Apple Silicon
- Powered by ServBay






