Supervisor è un sistema client / server utilizzato per controllare una serie di processi UNIX, in particolare processi relativi a un progetto o un cliente. Ad esempio, è possibile utilizzare il supervisore per generare e monitorare un numero arbitrario di code di lavoro dell'applicazione Web.
I componenti di questo sistema sono:
- supervisord: il pezzo server del sistema.
- supervisorctl: l'interfaccia della riga di comando utilizzata per interagire con il server.
- Server Web: un semplice server Web e un'interfaccia utente Web con funzionalità di base rispetto a supervisore .
- Interfaccia XML-RPC: lo stesso server HTTP utilizzato dal client Web, serve un'interfaccia XML-RPC che può essere utilizzata per controllare i programmi di supervisione.
In questo tutorial installeremo la versione più aggiornata del supervisore, dimostreremo come generare e gestire i programmi supervisorctl
e come configurare un'interfaccia web per gestire i nostri programmi.
Installazione e configurazione di base
Installeremo supervisore tramite easy_install
, una funzione degli strumenti di installazione di Python.
Innanzitutto, aggiorna l'elenco dei pacchetti locali e quindi installa Python setuptools
.
sudo apt-get update && sudo apt-get install python-setuptools
Ora possiamo installare il supervisore.
sudo easy_install supervisor
Una volta completata l'installazione, dobbiamo generare il nostro file di configurazione. Crea una cartella denominata supervisor
all'interno /etc
.
sudo mkdir /etc/supervisor
E quindi eseguire quanto segue.
echo_supervisord_conf > /etc/supervisor/supervisord.conf
Se non hai effettuato l'accesso con l' root
utente, potresti ricevere un Permission denied
errore (anche con sudo
). Ciò è dovuto al reindirizzamento. Per ovviare a questo, accedi come root.
sudo su
Quindi è possibile eseguire nuovamente il comando.
echo_supervisord_conf > /etc/supervisor/supervisord.conf
Ora puoi lasciare l' root
utente con il exit
comando. Il echo_supervisord_conf
comando è stato fornito dalla nostra installazione del supervisore.
Configurazione di base
Apri il /etc/supervisor/supervisord.conf
file e controlla il suo contenuto. Noterai che questo file di configurazione segue la INI
sintassi ed è diviso per sezioni (rappresentata da parentesi come in [section-name]
).
Per aggiungere programmi che devono essere gestiti dal supervisore, dobbiamo solo creare le [program]
sezioni appropriate . Tuttavia, per evitare di incasinare il file di configurazione principale ogni volta che è necessario aggiungere (o modificare) un programma, utilizzeremo la [include]
sezione. Trova questa sezione, decommentala e poi modificala per assomigliare alla seguente.
[include]
files=conf.d/*.conf
Ora per ogni programma che vogliamo aggiungere, creeremo un .ini
file all'interno della /etc/supervisor/conf.d/
directory. Consente di creare questa cartella.
sudo mkdir /etc/supervisor/conf.d
Avvio del server supervisore
Come notato prima, il supervisore è composto da un server e client che si connettono ad esso. Per poter gestire e controllare i programmi, è necessario avviare il server. Per fare ciò, registreremo il server supervisore systemd
, in modo che il server possa essere avviato all'avvio del sistema.
Per fare ciò, crea un file chiamato supervisord.service
nella /etc/systemd/system
directory.
sudo touch /etc/systemd/system/supervisord.service
Aggiungi i seguenti contenuti al file.
[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
Attiva il servizio supervisord.
sudo systemctl start supervisord.service
Finché il file di servizio si trova nella /etc/systemd/system
directory, verrà avviato automaticamente all'avvio del sistema.
Puoi controllare lo stato del servizio.
systemctl status supervisord.service
Inoltre, puoi controllare i registri.
sudo journalctl -u supervisord.service
Aggiunta di programmi
I programmi controllati dal supervisore sono forniti da diverse [program]
sezioni della configurazione. Per ogni programma che vogliamo gestire, creeremo un file di configurazione autonomo che informa il percorso eseguibile del comando, eventuali variabili ambientali, come eseguire in caso di arresto.
Innanzitutto, creiamo un semplice script che registra un timestamp. Crea un file chiamato hello_supervisor.sh
(ovunque tu voglia, faremo riferimento al percorso completo di questo script).
touch hello_supervisor.sh
Ora inserisci i seguenti contenuti
#!/bin/bash
while true
do
# Echo current timestamp to stdout
echo Hello Supervisor: `date`
# Echo 'error!' to stderr
echo An error ocurred at `date`! >&2
sleep 1
done
Ora rendilo eseguibile
chmod +x hello_supervisor.sh
In termini pratici questa sceneggiatura è praticamente inutile. Tuttavia, possiamo usarlo per dimostrare il potere del supervisore. Creare il file di configurazione corrispondente eseguendo quanto segue.
sudo touch /etc/supervisor/conf.d/hello_supervisor.conf
Ora inserisci i seguenti contenuti in questo file.
[program:hello_supervisor]
command=/home/USER/hello_supervisor.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/hello_supervisor.err.log
stdout_logfile=/var/log/hello_supervisor.out.log
Nota: assicurati di sostituire USER
con il tuo nome utente.
Esamineremo questa configurazione passo dopo passo.
[program:hello_supervisor]
command=/home/USER/hello_supervisor.sh
Innanzitutto, la configurazione inizia definendo un programma di nome hello_supervisor . Informa inoltre l'intero percorso dell'eseguibile da eseguire.
autostart=true
Questa riga afferma che questo programma dovrebbe essere avviato automaticamente all'avvio del supervisore.
autorestart=true
Se il programma viene chiuso, per qualsiasi motivo, questa riga informa il supervisore di riavviare automaticamente il processo.
stderr_logfile=/var/log/hello_supervisor.err.log
stdout_logfile=/var/log/hello_supervisor.out.log
Queste righe definiscono la posizione del file di registro per stderr
e stdout
, rispettivamente.
Gestione dei programmi
Ora che abbiamo installato e configurato il supervisore, siamo in grado di gestire i nostri processi.
Dopo aver aggiunto un nuovo programma, dovremmo eseguire i seguenti due comandi, per informare il server di rileggere i file di configurazione e applicare eventuali modifiche.
sudo supervisorctl reread
sudo supervisorctl update
Ora esegui il supervisorctl
client.
sudo supervisorctl
Sarai accolto con un elenco dei processi registrati. Vedrai un processo chiamato hello_supervisor
con uno RUNNING
stato.
hello_supervisor RUNNING pid 6853, uptime 0:22:30
supervisor>
Digitare help
per un elenco di comandi disponibili.
supervisor> help
default commands (type help <topic>):
=====================================
add exit open reload restart start tail
avail fg pid remove shutdown status update
clear maintail quit reread signal stop version
In poche parole, possiamo start
, stop
e restart
programmi facendo passare il nome del programma come argomento al rispettivo comando.
supervisor> stop hello_supervisor
hello_supervisor: stopped
supervisor> start hello_supervisor
hello_supervisor: started
supervisor> restart hello_supervisor
hello_supervisor: stopped
hello_supervisor: started
supervisor>
Possiamo anche dare un'occhiata all'output del programma con il tail
comando.
supervisor> tail hello_supervisor
Hello Supervisor: Mon Sep 25 19:27:29 UTC 2017
Hello Supervisor: Mon Sep 25 19:27:30 UTC 2017
Hello Supervisor: Mon Sep 25 19:27:31 UTC 2017
Per l' stderr
output, puoi anche usare tail
.
supervisor> tail hello_supervisor stderr
An error ocurred at Mon Sep 25 19:31:12 UTC 2017!
An error ocurred at Mon Sep 25 19:31:13 UTC 2017!
An error ocurred at Mon Sep 25 19:31:14 UTC 2017!
Invocando il status
comando, è possibile visualizzare lo stato di tutti i programmi registrati.
Una volta finito, puoi smettere.
supervisor> quit
Il client del server web
Per consentire l'accesso al server web supervisord, aprire il file di configurazione supervisord e individuare la [inet_http_server]
sezione.
nano /etc/supervisor/supervisord.conf
Ora aggiorna la configurazione di questa sezione con quanto segue.
[inet_http_server]
port=*:9001
username=your_username
password=your_password
Sostituisci your_username
e your_password
con le credenziali desiderate, salva le modifiche e riavvia il servizio supervisord.
sudo systemctl restart supervisord.service
Ricorda di consentire l' TCP
accesso alla porta 9001
sul tuo firewall e quindi l'accesso http://{server-ip}:9001
dal tuo browser. Quando richiesto, fornire il proprio username
e password
. Ora puoi controllare i tuoi processi dal web.
Conclusione
Abbiamo installato la versione più aggiornata di supervisord, imparato come configurarlo per l'avvio automatico del sistema con systemd e anche rivisto un utilizzo di base di supervisorctl
. Per configurazioni e casi d'uso più avanzati è possibile fare riferimento alla documentazione ufficiale del supervisord .