Formas de pagamento Abuse

Como configurar o SuperVisor

18.04.2022, 23:02

Para gerir os processadores no Linux, existem sistemas de inicialização como o systemd. Se precisar de uma solução mais simples, um programa que possa gerir os processos da sua aplicação, quer no sistema quer num contentor Docker. Esse programa existe - é o supervisor. É um gerenciador de processos open-source funcionalmente simples escrito em Python, que pode ser usado para executar tantas cópias de um processo quanto necessário e monitorar seu estado. A seguir, mostraremos como instalar e configurar o Supervisor usando o Ubuntu 20.04 como exemplo.

Instalando o Supervisor

A maneira mais fácil de obter o programa é instalá-lo a partir dos repositórios oficiais. Para isso, é necessário executar o comando:

$ sudo apt install supervisor

Como configurar o SuperVisor

Se quiser que o programa seja executado a toda a hora, tem de o adicionar ao seu carregador automático e executá-lo. Executar:

$ sudo systemctl enable supervisor --now

Como configurar o SuperVisor

De seguida, pode ver o estado utilizando o comando:

$ sudo systemctl status supervisor

Como configurar o SuperVisor

Processo de configuração

O ficheiro de configuração está localizado em /etc/supervisor/supervisord.conf. É também aqui que se encontram as definições básicas. É melhor usar o diretório /etc/supervisor/conf.d/ para configurar os processos em execução . O ficheiro de configuração principal pode ser deixado por defeito. Vamos ver como criar ficheiros de configuração para programas. A sintaxe de uma secção para um único processo é a seguinte:

nome da variável valor

Para cada processo é necessário passar estas variáveis para que este se inicie e recupere automaticamente após uma falha:

  • diretório - diretório de trabalho;
  • comando - comando para iniciar o processo;
  • utilizador- utilizador, em nome do qual o processo será iniciado;
  • autostart - se o processo deve ser iniciado automaticamente;
  • autorestart- se o processo deve ser reiniciado;

No entanto, existem muitas mais definições disponíveis, aqui estão algumas delas que serão discutidas neste artigo:

  • prioridade - prioridadedo processo a ser iniciado;
  • environment - variáveis de ambiente a serem passadas para o processo;
  • stdout_logfile - para onde redirecionar a saída stdout do processo;
  • stderr_logfile - para onde redirecionar a saída stderr do processo;
  • process_name- nome do processo, com a possibilidade de substituir o número da cópia;
  • numprocs - número de cópias do processo a ser iniciado;
  • startretries - número de tentativas para iniciar o programa;
  • redirect_stderr - redirecciona a saída de erro do processo para a saída do supervisor;
  • redirect_stdout - redirecciona a saída do processo para a saída do supervisor.

Para melhor compreensão e exemplo, vamos executar um script PHP que ficará suspenso em segundo plano:

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

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

É possível criar um arquivo de configuração do supervisor separado para o processo. É possível inserir a configuração bem no final do arquivo de configuração principal, mas é melhor não fazer isso. É melhor criar um ficheiro de configuração separado para cada programa em /etc/supervisor/conf.d/ com o nome *.conf. Por exemplo, para este programa este ficheiro terá o seguinte aspeto:

$ 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

Depois é necessário reiniciar o supervisor, o que pode ser feito com o systemctl:

$ sudo systemctl restart supervisor

ou com o utilitário supervisorctl:

$ sudo supervisorctl reload

Como configurar o SuperVisor

Também é possível ver o estado dos processos configurados usando o comando:

Como configurar o SuperVisor

Se o processo estiver no estado RUNNING, está tudo bem e foi iniciado com sucesso. Mas, neste caso, o processo está a ser executado numa única instância e, muitas vezes, é necessário executar várias cópias do mesmo processo. Para este efeito, podemos utilizar os parâmetros process_name e numprocs. O primeiro permite-lhe modificar o nome do processo para conter o número da cópia, e o segundo permite-lhe especificar quantas cópias devem ser executadas.

A variável process_name geralmente contém um padrão de formatação de string python que contém o nome do programa e o número do processo: %(program_name)s_%(process_num)02d. Aqui o nome da variável está entre parênteses, seguido do seu tipo. Por exemplo, para executar o mesmo programa em quatro threads, o ficheiro de configuração deve ser definido desta 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

Agora temos que recarregar o supervisorctl novamente e 4 processos estarão em execução:

$ sudo supervisorctl status

Como configurar o SuperVisor

Ao mesmo tempo, é possível guardar todos os dados produzidos pelo programa no ficheiro de registo. Os parâmetros stdout_logfile e stderr_logfile são utilizados para este fim. Por exemplo, é possível enviar o ficheiro de registo da sua execução diretamente para a pasta com o programa.

$ 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

Depois de reiniciar o serviço, os registos aparecerão na pasta com o programa:

Como configurar o SuperVisor

Da mesma forma, se quiser redirecionar a saída dos seus processos para a saída padrão do supervisor, deve utilizar os parâmetros redirect_stderr e redirect_stdout. Se o seu programa precisar de quaisquer variáveis de ambiente, pode passá-las usando o parâmetro environment. As variáveis devem ser escritas com vírgulas. Por exemplo:

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

Após cada alteração de configuração, lembre-se de reiniciar o supervisor para aplicar as alterações. O utilitário supervisorctl pode ser usado para controlar processos. Como já se apercebeu, para ver a lista de processos é necessário executar:

$ sudo supervisorctl status

Depois, sabendo o nome do processo, pode reiniciá-lo, por exemplo processo:processo_00:

$ sudo supervisorctl restart process:process_00

Como configurar o SuperVisor

Parar:

$ sudo supervisorctl stop process:process_00

Ou iniciar:

$ sudo supervisorctl start process:process_00

Em alternativa, pode ligar-se ao processo e ver o que este envia para stdout/stderr utilizando o comando fg:

$ sudo supervisorctl fg process:process_00

Vimos como o supervisor é configurado e como utilizar o software de gestão de processos.