Supervisor Setup for Non-Root Users

Install Supervisor

sudo apt update
sudo apt install supervisor

Configure Access and Directories

# Create group supervisor
sudo groupadd supervisor
# Add user to supervisor group
sudo usermod -a -G supervisor $USER

# Set up config directories
sudo mkdir -p /etc/supervisor/conf.d
sudo chown -R root:supervisor /etc/supervisor
sudo chmod -R 775 /etc/supervisor

# Set up main supervisor config
sudo bash -c 'cat > /etc/supervisor/supervisord.conf << EOL
[unix_http_server]
file=/var/run/supervisor.sock
chmod=0770
chown=root:supervisor

[supervisord]
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
childlogdir=/var/log/supervisor

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock

[include]
files = /etc/supervisor/conf.d/*.conf
EOL'

# Set log permissions
sudo chown -R root:supervisor /var/log/supervisor
sudo chmod -R 775 /var/log/supervisor

# Restart supervisor
sudo systemctl restart supervisor

Usage Example

Create program config in /etc/supervisor/conf.d/program.conf:

[program:myapp]
command=/usr/bin/php /path/to/script.php
directory=/path/to/app
user=your_username
autostart=true
autorestart=true
stderr_logfile=/var/log/supervisor/myapp.err.log
stdout_logfile=/var/log/supervisor/myapp.out.log

Control programs without sudo:

supervisorctl status
supervisorctl start myapp
supervisorctl stop myapp
supervisorctl restart myapp