Reinicie automaticamente o script rc.local no crash

1

Eu tenho rc.local carregando um script na inicialização. Querendo saber se este serviço trava há uma maneira de tê-lo reiniciar automaticamente?

    
por Zanden 27.05.2016 / 15:31

1 resposta

3

Em vez de usar /etc/rc.local para serviços de longa duração, crie um serviço do systemd . Como exemplo, crie /etc/systemd/system/foo.service , contendo:

[Unit]
Description=Foo

[Service]
Type=simple
ExecStart=/usr/bin/sleep 10
Restart=always

[Install]
WantedBy=default.target

Isso cria um serviço que irá reiniciar o comando quando ele morrer. Substitua ExecStart pelo seu comando.

Depois de criar este arquivo, faça:

sudo systemctl daemon-reload
sudo systemctl enable foo.service
sudo systemctl start foo.service

O primeiro comando informará systemctl para procurar novas definições de serviço. O segundo habilita o serviço de acordo com as condições de inicialização que ele possui (neste caso, para começar com o default.target , para que ele inicie na inicialização). O último comando inicia o serviço para esta sessão.

Para Type :

  

Se definido como simple (o padrão se nem Type= nem BusName= , mas    ExecStart= são especificados), espera-se que o processo configurado   com ExecStart= é o processo principal do serviço. Neste modo, se   o processo oferece funcionalidade a outros processos no sistema, sua   canais de comunicação devem ser instalados antes que o daemon seja   iniciado (por exemplo, soquetes configurados pelo systemd, via ativação de soquete), como   O systemd prosseguirá imediatamente, iniciando unidades de acompanhamento.

     

Se definido como forking , espera-se que o processo configurado com    ExecStart= chamará fork() como parte de sua inicialização. Pai   espera-se que o processo saia quando o arranque estiver concluído e   canais de comunicação estão configurados. A criança continua a correr como o   processo principal daemon. Esse é o comportamento dos daemons tradicionais do UNIX.   Se esta configuração for usada, é recomendável usar também o PIDFile=   opção, para que o systemd possa identificar o processo principal do daemon.   O systemd continuará com as unidades iniciais de acompanhamento assim que   saída do processo pai.

Portanto, se o seu comando forks, use Type=forking e defina PIDFile , se puder.

Para WantedBy , execute systemctl list-units | grep target para encontrar outros destinos disponíveis que você possa usar para um controle mais refinado.

    
por muru 27.05.2016 / 15:57