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.