> For the complete documentation index, see [llms.txt](https://docs.elentra.org/technical/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.elentra.org/technical/administrators/application-server/installing-supervisor.md).

# Installing Supervisor

Supervisor is a process control system used to ensure that the [Laravel Queues](https://laravel.com/docs/5.5/queues) used by Elentra are running. You must install and configure Supervisor on any environment running Elentra, but doing the following:

1. Install the required Supervisor package:

   ```
   yum install supervisor
   systemctl enable supervisord
   systemctl start supervisord
   ```
2. Edit the main configuration file at `/etc/supervisord.conf` and make the following changes to allow control over Supervisor by non-root users.\
   \
   Modify the `[unix_http_server]` section\
   \
   Set the value of `chmod` to `0770` in order give access users who are in the same group and then add a new option called `chown` and set it to the user `nobody` and group `apache`. If Apache is not running as the group `apache`, please substitute this accordingly.

   ```
   [unix_http_server]
   file=/var/run/supervisor.sock   ; (the path to the socket file)
   chmod=0770                      ; sockef file mode (default 0700)
   chown=nobody:apache
   ```

   Modify the `[supervisorctl]` section\
   \
   Supervisor must be configured to communicate over a Unix socket.

   ```
   [supervisorctl]
   serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
   ```
3. Add the `staging` and `production` users to the `apache` group.

   ```
   usermod -G apache -a production
   usermod -G apache -a staging
   ```
4. Create a new file in the `/etc/supervisor.d` directory called `elentra.ini`, and use the following template snippet as a reference to create your own file.<br>

   Please make sure that you have the correct path in **`command`** and **`stdout_logfile`**, and that **`user`** is the correct system account that your existing cron jobs are run as.

   ```
   [program:staging]
   process_name=%(program_name)s_%(process_num)02d
   command=php /var/www/vhosts/staging.elentra.med.university.edu/current/www-root/core/library/vendor/elentrapackages/elentra-1x-api/artisan queue:work --queue=high,emails,default,low --env=staging
   autostart=true
   autorestart=true
   user=staging
   numprocs=1
   redirect_stderr=true
   stdout_logfile=/var/www/vhosts/staging.elentra.med.university.edu/storage/logs/worker.log

   [program:production]
   process_name=%(program_name)s_%(process_num)02d
   command=php /var/www/vhosts/elentra.med.university.edu/current/www-root/core/library/vendor/elentrapackages/elentra-1x-api/artisan queue:work --queue=high,emails,default,low --env=production
   autostart=true
   autorestart=true
   user=production
   numprocs=1
   redirect_stderr=true
   stdout_logfile=/var/www/vhosts/elentra.med.university.edu/storage/logs/worker.log

   [group:elentra]
   programs=staging,production
   ```
5. Restart Supervisor:

   ```
   systemctl restart supervisord
   ```
