Serviço systemd de depuração que falha na inicialização

1

Eu escrevi este serviço systemd simples para iniciar meu aplicativo no boot:

[Unit]
Description=Autostart
After=multi-user.target

[Service]
Environment=LD_LIBRARY_PATH=/home/pi/bin
ExecStart=/home/pi/bin/Server
Restart=on-failure
RestartSec=3
User=root
Group=root

[Install]
WantedBy=multi-user.target

Eu ativei o serviço e reiniciei. Na inicialização, o MyApp não está em execução e o status do serviço está "inativo":

● autostart.service - Autostart
   Loaded: loaded (/lib/systemd/system/autostart.service; enabled; vendor preset: enabled)
   Active: inactive (dead)

sem mais indicações. Tanto quanto eu sei se meu aplicativo trava o status deve relatar o código de erro de saída. Além disso, deve reiniciar após 3 segundos.

O lançamento manual do serviço, em vez disso, leva ao comportamento esperado:

● autostart.service - Autostart
   Loaded: loaded (/lib/systemd/system/autostart.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2017-10-20 12:06:39 CEST; 2min 32s ago
 Main PID: 1189 (Server)
   CGroup: /system.slice/autostart.service
           ├─1189 /home/pi/bin/Server
           └─1198 /home/pi/bin/Client

Oct 20 12:06:40 localhost Server[1189]:   some output from my application

Como você depuraria esse comportamento?

    
por Mark 20.10.2017 / 12:45

1 resposta

1

Você precisa adicionar

[Unidade]

Quer = network.target

Depois de = network.target

Para o seu arquivo de unidade. Aliás, seu serviço deve estar saindo normalmente quando não houver rede disponível, o que não será reiniciado automaticamente, porque não é uma falha, a menos que o serviço saia com um erro.

Seu serviço deve retornar com um valor diferente de zero para que o systemd considere a falha. Isso pode ser retornar 1 no main ou exit (1) em qualquer lugar em C, por exemplo.

    
por 20.10.2017 / 14:32