Formas de pagamento Abuse

Como efetuar um reinício automático de um serviço Linux

26.02.2021, 20:42

Muitas vezes, há uma queda espontânea do serviço. O utilizador tem de tratar da sua recuperação manual. Se isso acontecer num computador doméstico, não há qualquer problema. Mais ainda - é bom, porque existe uma oportunidade real para determinar o estado do serviço, identificar falhas e eliminá-las. Mas a situação é bastante diferente quando se trata de servidores e serviços VPS, que têm de trabalhar constantemente para fornecer acesso a um sítio Web ou aplicação. Neste artigo, veremos como configurar o reinício automático dos serviços Linux de várias formas: com um script de monitorização executado periodicamente via cron e no systemd.

Reinício automático no systemd

A configuração padrão é que o Systemd não fará nada com o serviço se ele falhar. Mas o utilizador pode sempre configurar as definições de modo a que, em caso de falha ou paragem do serviço, este seja reiniciado automaticamente. Para este efeito, é utilizada a diretiva Restart, que deve ser adicionada à secção Service. De seguida, vamos ver um exemplo de configuração do reinício automático do serviço Apache:

$ sudo systemctl edit apache2

[Service]

Restart=on-failure

RestartSec=5s

настройка автоматического перезапуска сервиса Apache:

Aqui RestartSec especifica o tempo de espera antes de reiniciar o serviço. Quando tiver terminado, guarde as alterações e execute o comando daemon-reload para reler a configuração:

$ sudo systemctl daemon-reload

Em seguida, para verificar se tudo está a funcionar corretamente, veja o estado do processo, termine o processo com um sinal kill:

 $ sudo systemctl status apache2

$ kill -KILL 32091

Процесс сигналом kill

Verifique o estado novamente, o processo deve estar em execução. Para definir a inicialização para ser executada sempre, utilize uma diretiva especial Restart: always. Mas deve ter muito cuidado ao utilizá-la, porque não lhe permitirá terminar o processo mesmo que seja necessário. Se o processo estiver constantemente a falhar, para que seja reiniciado, pode adicionar um limite ao número de reinícios na secção Serviço:

$ sudo systemctl edit apache2

[Service]

StartLimitIntervalSec=500

StartLimitBurst=5

Restart=on-failure

RestartSec=5s

Лимит на количество перезапусков в секцию Service

Aqui, StartLimitBurst e StartLimitIntervalSec indicam a importância de reiniciar o serviço cinco vezes e, se ele falhar todas essas cinco vezes, deixá-lo em paz e não tocar nele. A segunda diretiva limita os reinícios do serviço a 500 segundos.

Reinício automático por script

Este é provavelmente o método mais fiável e à prova de falhas que funciona em todas as versões do Linux. No Apache é fácil construir um reinício automático usando um script. Para o fazer, é necessário introduzir o comando:

$  sudo vi /usr/local/bin/apache-monitor.sh

#!/bin/bash

ps -A | grep apache2 || systemctl start apache2

Guarde o ficheiro e certifique-se de que o torna executável:

chmod ugo+x /usr/local/bin/apache-monitor.sh

Não se esqueça de adicionar uma entrada cron para executar o script periodicamente:

$ sudo crontab -e

*/5 * * * * /usr/local/bin/apache-monitor.sh

E pronto. Sim, configurar um reinício automático do serviço não é tão fácil como pode parecer à primeira vista. Mas é uma capacidade importante, pelo que deve prestar atenção a ela - vale mesmo a pena.