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 nemType=nemBusName=, masExecStart=são especificados), espera-se que o processo configurado comExecStart=é 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 comExecStart=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 oPIDFile=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.