Metodi di pagamento Abuse

Come configurare SuperVisor

18.04.2022, 23:02

Per gestire i processori in Linux esistono sistemi di inizializzazione come systemd. Se avete bisogno di una soluzione più semplice, un programma che possa gestire i processi della vostra applicazione, sia sul sistema che in un contenitore Docker. Un programma del genere esiste: è supervisor. Si tratta di un gestore di processi open source scritto in Python, semplice dal punto di vista funzionale, che può essere utilizzato per eseguire tutte le copie di un processo necessarie e monitorarne lo stato. Di seguito vi mostreremo come installare e configurare Supervisor utilizzando Ubuntu 20.04 come esempio.

Installazione di Supervisor

Il modo più semplice per ottenere il programma è installarlo dai repository ufficiali. Per farlo, è necessario eseguire il comando:

$ sudo apt install supervisor

Come configurare SuperVisor

Se si desidera che il programma venga eseguito sempre, è necessario aggiungerlo al proprio autoloader ed eseguirlo. Eseguire:

$ sudo systemctl enable supervisor --now

Come configurare SuperVisor

Successivamente, è possibile visualizzare lo stato utilizzando il comando:

$ sudo systemctl status supervisor

Come configurare SuperVisor

Processo di configurazione

Il file di configurazione si trova in /etc/supervisor/supervisord.conf. Qui si trovano anche le impostazioni di base. È meglio usare la directory /etc/supervisor/conf.d/ per configurare i processi in esecuzione . Il file di configurazione principale può essere lasciato come predefinito. Vediamo come creare file di configurazione per i programmi. La sintassi di una sezione per un singolo processo è la seguente:

nome variabile valore

Per ogni processo è necessario passare tali variabili affinché si avvii automaticamente e si riprenda dopo un crash:

  • directory - directory di lavoro;
  • command - comando per avviare il processo;
  • user- utente, per conto del quale il processo verrà avviato;
  • autostart - se il processo deve essere avviato automaticamente;
  • autorestart- se il processo deve essere riavviato;

Tuttavia, sono disponibili molte altre impostazioni, alcune delle quali saranno discusse in questo articolo:

  • priority - prioritàdel processo da avviare;
  • environment - variabili d'ambiente da passare al processo;
  • stdout_logfile - dove reindirizzare l'output stdout del processo;
  • stderr_logfile - dove reindirizzare l'output stderr del processo;
  • process_name- nome del processo, con la possibilità di sostituire il numero di copia;
  • numprocs - numero di copie del processo da avviare;
  • startretries - numero di tentativi di avvio del programma;
  • redirect_stderr - reindirizza l'output di errore del processo all'output del supervisore;
  • redirect_stdout - reindirizza l'output del processo all'output del supervisore.

Per una migliore comprensione e per un esempio, eseguiamo uno script PHP che rimarrà in background:

$ sudo vi /home/sergiy/program/process.php

<?php
echo "Started...";
while(true){
  sleep(5);
}

È possibile creare un file di configurazione del supervisore separato per il processo. Si può inserire la configurazione alla fine del file di configurazione principale, ma è meglio non farlo. È meglio creare un file di configurazione separato per ogni programma in /etc/supervisor/conf.d/ con il nome *.conf. Ad esempio, per questo programma il file avrà questo aspetto:

$ sudo vi /etc/supervisor/conf.d/process.conf

[program:process]


directory=/home/sergiy/program/


command=/usr/bin/php process.php


user=sergiy


autostart=true


autorestart=true

È quindi necessario riavviare supervisor, operazione che può essere eseguita con systemctl:

$ sudo systemctl restart supervisor

Oppure con l'utilità supervisorctl:

$ sudo supervisorctl reload

Come configurare SuperVisor

È anche possibile vedere lo stato dei processi configurati utilizzando il comando:

Come configurare SuperVisor

Se il processo è in stato di RUNNING, va tutto bene ed è stato avviato con successo. Ma in questo caso il processo è in esecuzione in una singola istanza e spesso è necessario eseguire più copie dello stesso processo. A questo scopo si possono usare i parametri process_name e numprocs. Il primo consente di modificare il nome del processo in modo che contenga il numero di copie, mentre il secondo consente di specificare quante copie devono essere eseguite.

La variabile process_name contiene solitamente uno schema di formattazione di stringhe python che contiene il nome del programma e il numero del processo: %(nome_programma)s_%(numero_processo)02d. Qui il nome della variabile è tra parentesi, seguito dal suo tipo. Per esempio, per eseguire lo stesso programma in quattro thread, il file di configurazione deve essere impostato in questa forma:

$ sudo vi /etc/supervisor/conf.d/process.conf

[program:process]


directory=/home/sergiy/program/


command=/usr/bin/php process.php


user=sergiy


autostart=true


autorestart=true


process_name=%(program_name)s_%(process_num)02d


numprocs=4

Ora dobbiamo ricaricare supervisorctl di nuovo e 4 processi saranno in esecuzione:

$ sudo supervisorctl status

Come configurare SuperVisor

Allo stesso tempo è possibile salvare tutti i dati emessi dal programma nel file di log. A questo scopo si utilizzano i parametri stdout_logfile e stderr_logfile. Ad esempio, è possibile salvare il file di log della sua esecuzione direttamente nella cartella del programma.

$ sudo vi /etc/supervisor/conf.d/process.conf

[program:process]


directory=/home/sergiy/program/


command=/usr/bin/php process.php


user=sergiy


autostart=true


autorestart=true


process_name=%(program_name)s_%(process_num)02d


numprocs=4


stdout_logfile=/home/sergiy/program/process.log


stderr_logfile=/home/sergiy/program/process.log.error

Dopo il riavvio del servizio, i log appariranno nella cartella con il programma:

Come configurare SuperVisor

Allo stesso modo, se si vuole reindirizzare l'output dei processi all'output standard del supervisore, si devono usare i parametri redirect_stderr e redirect_stdout. Se il programma ha bisogno di variabili d'ambiente, è possibile passarle con il parametro environment. Le variabili devono essere scritte con le virgole. Ad esempio:

$ environment=DISPLAY=":1",HOME="/root"

Dopo ogni modifica della configurazione, ricordarsi di riavviare supervisor per applicare le modifiche. L'utilità supervisorctl può essere usata per controllare i processi. Come si è già capito, per vedere l'elenco dei processi è necessario eseguire:

$ sudo supervisorctl status

Quindi, conoscendo il nome del processo, è possibile riavviarlo, ad esempio processo:processo_00:

$ sudo supervisorctl restart process:process_00

Come configurare SuperVisor

Arresta:

$ sudo supervisorctl stop process:process_00

Oppure avviare:

$ sudo supervisorctl start process:process_00

In alternativa, è possibile connettersi al processo e vedere cosa emette in stdout/stderr utilizzando il comando fg:

$ sudo supervisorctl fg process:process_00

Abbiamo visto come si configura Supervisor e come si usa il software di gestione dei processi.