How To Install And Configure Supervisor On Ubuntu

In this blog post , We will see how to install and configure supervisor on Ubuntu 18.04.

 

What Is Supervisor?

 

Supervisor is a client/server system that allows its users to monitor and control a number of processes on UNIX-like operating systems.

 

It shares some of the same goals of programs like launchd, daemontools, and runit. Unlike some of these programs, it is not meant to be run as a substitute for init as “process id 1”.

 

Instead it is meant to be used to control processes related to a project or a customer, and is meant to start like any other program at boot time.

 

Components Of Supervisor

 

The components of supervisor are as follows:

 

Supervisord:

 

The server piece of supervisor is named supervisord.

It is responsible for starting child programs at its own invocation, responding to commands from clients, restarting crashed or exited subprocesseses, logging its subprocess stdout and stderr output, and generating and handling “events” corresponding to points in subprocess lifetimes.

 

Supervisorctl:

 

The command-line client piece of the supervisor is named supervisorctl.

 

It provides a shell-like interface to the features provided by supervisord.

 

From supervisorctl, a user can connect to different supervisord processes (one at a time), get status on the subprocesses controlled by, stop and start subprocesses of, and get lists of running processes of a supervisord.

 

Web Server:

 

A web user interface with functionality comparable to supervisorctl may be accessed via a browser if you start supervisord against an internet socket.

 

Visit the server URL (e.g. http://localhost:9001/) to view and control process status through the web interface after activating the configuration file’s [inet_http_server] section.

 

XML-RPC Interface:

 

The same HTTP server which serves the web UI serves up an XML-RPC interface that can be used to interrogate and control supervisor and the programs it runs.

 

Minimum Requirements

 

  • Supervisor has been tested and is known to run on Linux (Ubuntu 9.10), Mac OS X (10.4/10.5/10.6), and Solaris (10 for Intel) and FreeBSD 6.1. It will likely work fine on most UNIX systems.

 

  • Supervisor is intended to work on Python 3 version 3.4 or later and on Python 2 version 2.7.

 

  • Supervisor will not run at all under any version of Windows.

 

Installing & Configuring Supervisor

 

In this guide , We will install supervisor using the python’s setuptools , easy_install

 

To install python setuptools , Run the below commands

 

sudo apt-get update && sudo apt-get install python-setuptools

 

 

We can install supervisor now.

 

sudo easy_install supervisor

 

 

Once the supervisor packages are installed , We need to setup a directory for the supervisor.

 

sudo mkdir /etc/supervisor

 

We add the sample supervisor config to the supervisord.conf file.

 

echo_supervisord_conf > /etc/supervisor/supervisord.conf

 

Open the /etc/supervisor/supervisord.conf file and add the below line in the [include] section

 

conf.d is the folder where we will host all the programs.

 

 files=conf.d/*.conf

 

Monitor Linux Processes

 

Save and close the file.

 

To setup programs under supervisor , We need to create conf.d directory.

 

mkdir /etc/supervisor/conf.d

 

Lets setup the systemd file to manage the supervisor.

 

Create a file supervisord.service and add the below contents.

 

vi /etc/systemd/system/supervisord.service

 

[Unit]
Description=Supervisor daemon
Documentation=http://supervisord.org
After=network.target

[Service]
ExecStart=/usr/local/bin/supervisord -n -c /etc/supervisor/supervisord.conf
ExecStop=/usr/local/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/local/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target
Alias=supervisord.service

 

Save and close the file.

 

Lets start the supervisor service.

 

systemctl start supervisord.service

 

Check the status of the service and enable it to start on system boot,

 

systemctl status supervisord.service

 

systemctl enable supervisord.service

 

 

Adding A Program

 

For this tutorial , We are going to create the shell script which we will configure as a program as we want it to be keep running.

 

The script we are going to add is to monitor the CPU and memory usage of the Linux process.

 

We will be creating 4 files under /opt directory.

 

Create a file named cpu-top and add the below contents.

 

!/bin/bash
z=$(ps aux)
while read -r z
do
var=$var$(awk '{print "cpu_usage{process=\""$11"\", pid=\""$2"\"}", $3z}');
done <<< "$z"
curl -X POST -H "Content-Type: text/plain" --data "$var
" http://localhost:9091/metrics/job/top/instance/machine

 

Create a file named memory-top and add the below contents.

 

!/bin/bash
z=$(ps aux)
while read -r z
do
var=$var$(awk '{print "memory_usage{process=\""$11"\", pid=\""$2"\"}", $4z}');
done <<< "$z"
curl -X POST -H "Content-Type: text/plain" --data "$var
" http://localhost:9091/metrics/job/top/instance/machine

 

We have now created 2 files named memory-top and cpu-top.

 

We are going to create 2 .sh files (bash scripts) to keep the scripts running.

 

Create a file memory.sh and add the below contents

 

cd /opt
while sleep 1; do ./memory-top; done;

 

Create a file named cpu.sh and add the below contents

 

cd /opt
while sleep 1; do ./cpu-top; done;

 

Make sure the bash scripts are executable by running,

 

chmod +x cpu.sh && chmod +x memory.sh

 

By this time , We will have four files under /opt directory

 

Now we need to setup a program under supervisor to manage these bash scripts.

 

cd /etc/supervisor/conf.d

 

Create a file named cpu.conf and add the below configurations.

 

[program:cpu]
command=sh /opt/cpu.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/long.err.log
stdout_logfile=/var/log/long.out.log

 

Create a file named memory.conf and add the below configurations.

 

[program:memory]
command=sh /opt/memory.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/long.err.log
stdout_logfile=/var/log/long.out.log

 

Save and close the file.

 

We need to run the below commands to let the supervisor to reread the configuration file and apply the latest changes.

 

supervisorctl reread

 

supervisorctl update

 

To run the supervisor client , Run

 

supervisorctl

 

To check the status of the process , Run

 

status

 

You should get the below response.

 

Monitor Linux Processes

 

We can also check the status of the programs from the linux bash by running,

 

supervisorctl status

 

We can manage each programs from the supervisor client.

 

Now the bash scripts will keep collecting the cpu and memory usage of top running Linux processes.

 

These scripts will be managed by supervisor service.

 

To list all the available commands of supervisor client,

 

 

We can manage each programs by running

 

command programname

 

 

 

Configure Supervisor Webserver Client

 

To allow access to supervisord webserver ,

 

Open the /etc/supervisor/supervisord.conf file and go to [inet_http_server] section.

 

Uncomment all the four lines and configure as shown below.

 

[inet_http_server]
port=*:9001
username=give_username
password=give_password

 

Dont forget to replace give_username and give_password with the desired credentials.

 

Save and close the file.

 

We need to restart the supervisord service for the changes to take effect.

 

systemctl restart supervisord.service

 

We can access the supervisor webservice interface using the ip address of the server and the port 9001.

 

http://IPaddress:9001

 

It will ask for username and password , Once authenticated.

 

You will see the following screen.

 

 

From this interface we can manage the programs.

 

Conclusion

 

We have successfully installed and configured supervisor on the ubuntu server and also we have learnt to manage programs using supervisor service.

 

Hope you find it helpful.Please check out my other articles.