Supervisor Unrecognized Service Issue After Installing Latest Version via Pip: Troubleshooting & Fix Guide
Supervisor is a popular process control system for Unix-like operating systems, widely used to monitor and manage processes (e.g., web servers, background workers). It ensures that specified processes start automatically on boot, restart on failure, and remain running. While many users install Supervisor via pip (Python’s package manager) to access the latest versions, a common post-installation issue arises: the supervisor service is unrecognized by the system (e.g., systemctl or service commands fail with "unrecognized service" or "unit not found" errors).
This guide dives into why this issue occurs, how to diagnose it, and step-by-step fixes to get Supervisor running as a system service again.
Table of Contents#
- Understanding the "Unrecognized Service" Issue
- Common Causes
- Troubleshooting Steps
- Fixes: Restore the Supervisor Service
- Verify the Service is Working
- Prevention Tips
- Conclusion
- References
Understanding the "Unrecognized Service" Issue#
When you install Supervisor via pip, the tool itself (e.g., supervisord, the daemon) is installed, but system service integration (e.g., systemd or sysvinit scripts) is not always handled automatically. This leads to errors when trying to manage Supervisor with system tools:
-
Example error with
systemctl:$ sudo systemctl start supervisor Failed to start supervisor.service: Unit supervisor.service not found. -
Example error with
service:$ sudo service supervisor start supervisor: unrecognized service
The root cause is that the system’s service manager (e.g., systemd) cannot find a valid service file for Supervisor, or the existing service file points to an outdated/missing supervisord executable.
Common Causes#
Why does this happen after installing via pip? Here are the key culprits:
1. Pip Installs to a Non-Standard Path#
By default, pip install supervisor (without sudo) installs Supervisor to a user-specific directory (e.g., ~/.local/bin), which may not be in the system’s $PATH for root or system services. Even with sudo, pip often installs to /usr/local/bin, which may conflict with older service file paths (e.g., /usr/bin/supervisord from OS packages).
2. Missing or Outdated Service File#
pip does not automatically generate or update system service files (e.g., supervisor.service for systemd). If you previously installed Supervisor via an OS package (e.g., apt or yum), the service file may still reference the old supervisord path (e.g., /usr/bin/supervisord), but pip installs to /usr/local/bin/supervisord, breaking the link.
3. Permissions Issues#
If installed without sudo, supervisord and its configuration files may lack the permissions needed for the system service manager to access them, leading to silent failures.
Troubleshooting Steps#
Before fixing the issue, diagnose the root cause with these steps:
Step 1: Confirm Supervisor is Installed#
Check if Supervisor is installed and verify its version:
$ supervisord --version
# Example output: 4.2.5 (latest as of 2024) If this fails, reinstall Supervisor via pip:
$ sudo pip install --upgrade supervisor Step 2: Locate the supervisord Executable#
The system service needs to know where supervisord is installed. Run:
$ which supervisord
# Example outputs:
# /usr/local/bin/supervisord (pip with sudo)
# /home/youruser/.local/bin/supervisord (pip without sudo) If which supervisord returns nothing, Supervisor is not in your $PATH—reinstall with sudo to fix this.
Step 3: Check for an Existing Service File#
For systemd (most modern Linux distros: Ubuntu 16.04+, CentOS 7+, Debian 9+), service files are stored in:
/etc/systemd/system/(user-defined services)/lib/systemd/system/(OS-managed services)
Check if a supervisor.service file exists:
$ ls /etc/systemd/system/supervisor.service /lib/systemd/system/supervisor.service If the file is missing, the service is unrecognized because no systemd unit is defined. If it exists, proceed to verify its contents.
Step 4: Inspect the Service File (If It Exists)#
Open the service file (e.g., for systemd) and check the ExecStart line, which tells the system where to find supervisord:
$ sudo nano /etc/systemd/system/supervisor.service Look for:
ExecStart=/path/to/supervisord -c /etc/supervisor/supervisord.conf If /path/to/supervisord does not match the output of which supervisord, the service file is outdated.
Step 5: Check Systemd Status for Clues#
Run systemctl to get detailed error logs:
$ sudo systemctl status supervisor Common errors here include:
Executable path does not exist: /usr/bin/supervisord(outdated path)Failed to load unit file supervisor.service: No such file or directory(missing service file)
Fixes: Restore the Supervisor Service#
Based on the diagnosis, use one of these fixes to restore the service.
Fix 1: Reinstall Supervisor with System-Wide Permissions#
If supervisord is installed in a non-standard path (e.g., ~/.local/bin), reinstall it system-wide with sudo to ensure it lands in /usr/local/bin (a standard $PATH directory for system tools):
# Uninstall existing Supervisor (if needed)
$ sudo pip uninstall supervisor
# Reinstall system-wide with sudo
$ sudo pip install supervisor Now, verify the path:
$ which supervisord
/usr/local/bin/supervisord # This is good! If the service file already exists, this may resolve path mismatches. If not, proceed to Fix 2 or 3.
Fix 2: Update the Systemd Service File#
If the service file exists but has an outdated ExecStart path, update it to point to the correct supervisord location.
Step 1: Edit the Service File#
Open the service file in a text editor (e.g., nano or vim):
$ sudo nano /etc/systemd/system/supervisor.service Step 2: Update ExecStart#
Change the ExecStart line to match the output of which supervisord. For example:
# Old (incorrect) line:
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
# New (correct) line:
ExecStart=/usr/local/bin/supervisord -c /etc/supervisor/supervisord.conf Step 3: Reload Systemd and Restart the Service#
Tell systemd to reload its configuration and restart Supervisor:
$ sudo systemctl daemon-reload
$ sudo systemctl start supervisor
$ sudo systemctl enable supervisor # Optional: Start on boot Fix 3: Create a Missing Service File#
If no service file exists (e.g., fresh pip install with no prior OS package), create a systemd service file manually.
Step 1: Create the Service File#
Create /etc/systemd/system/supervisor.service with:
$ sudo nano /etc/systemd/system/supervisor.service Step 2: Add Service File Content#
Paste the following into the file (adjust paths if needed):
[Unit]
Description=Supervisor process control system for UNIX
Documentation=http://supervisord.org
After=network.target
[Service]
Type=forking
User=root # Run as root (or a dedicated user like 'supervisor')
Group=root
WorkingDirectory=/tmp
# Path to supervisord executable (from `which supervisord`)
ExecStart=/usr/local/bin/supervisord -c /etc/supervisor/supervisord.conf
# Path to supervisorctl executable
ExecReload=/usr/local/bin/supervisorctl -c /etc/supervisor/supervisord.conf reload
ExecStop=/usr/local/bin/supervisorctl -c /etc/supervisor/supervisord.conf shutdown
# Restart Supervisor if it crashes
Restart=on-failure
[Install]
WantedBy=multi-user.target Step 3: Save and Enable the Service#
Save the file, then reload systemd and start the service:
$ sudo systemctl daemon-reload
$ sudo systemctl start supervisor
$ sudo systemctl enable supervisor # Start on boot Fix 4: Use the OS Package Manager (Alternative)#
If pip installation continues to cause issues, consider installing Supervisor via your OS’s package manager (e.g., apt for Debian/Ubuntu, yum for RHEL/CentOS). OS packages automatically configure service files and dependencies.
Note: OS packages may lag behind the latest Supervisor version, but they are more stable for system integration.
For Debian/Ubuntu:#
$ sudo apt update
$ sudo apt install supervisor For RHEL/CentOS:#
$ sudo yum install supervisor OS-managed Supervisor will automatically create a service file, and you can start it with:
$ sudo systemctl start supervisor Verify the Service is Working#
After applying a fix, confirm the service is recognized and running:
-
Check service status:
$ sudo systemctl status supervisorYou should see
active (running)in green. -
Test process management:
Add a test process to Supervisor’s config (/etc/supervisor/supervisord.confor/etc/supervisor/conf.d/test.conf):[program:test] command=/bin/sleep 3600 # Runs a 1-hour sleep process autostart=true autorestart=trueReload Supervisor and check the process:
$ sudo supervisorctl reload $ sudo supervisorctl status test test RUNNING pid 12345, uptime 0:00:05
Prevention Tips#
To avoid this issue in the future:
- Use
sudofor Pip Installs: Always install Supervisor withsudo pip installto ensure system-wide access and standard paths. - Avoid Mixing Pip and OS Packages: If you install via
pip, do not also install viaapt/yum—this causes conflicting files. - Backup the Service File: Before upgrading Supervisor via
pip, back up/etc/systemd/system/supervisor.serviceto restore if paths change. - Check Service Status Post-Upgrade: After
pip install --upgrade supervisor, runsystemctl status supervisorto catch path issues early.
Conclusion#
The "unrecognized service" error after installing Supervisor via pip stems from mismatched paths or missing system service files. By diagnosing the location of supervisord, checking for outdated/missing service files, and applying fixes like reinstalling with sudo, updating the service file, or creating a new one, you can restore Supervisor as a system service. For stability, consider OS packages, but pip remains a viable option with proper path management.