O aplicativo C ++ que é executado após a inicialização quando um serviço específico está ativado não pode ser parado com systemctl stop

0

Eu criei um serviço em um Ubuntu 16.04 para executar um aplicativo c ++ após cada inicialização. O arquivo da unidade de serviço que criei e armazenei em / etc / systemd / system / é o seguinte (app.service):

[Unit]
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
Restart=always
ExecStart=/home/app/script.sh

[Install]
WantedBy=default.target

O script.sh contém o seguinte:

 #!/bin/bash
 sudo setcap cap_net_raw=ep /home/app/C++_APP  
 cd /home/app
 ./C++_APP

Quando meu aplicativo c ++ está em execução e dou systemctl stop npt.service, o comando não encerra sua execução e o aplicativo ainda está em execução. Devo dar um argumento no campo execstop que irá matar o pid específico ou existe uma maneira mais eficiente?

    
por dk13 04.04.2017 / 16:36

1 resposta

0

Como systemd lida com processos de interrupção e eliminação é coberto em man systemd.service e man systemd.kill . Se você não tem certeza de como uma diretiva específica funciona como ExecStop= , você pode encontrar a página man correta que documenta com man systemd.directives .

A documentação explicará que o comportamento padrão é enviar um sinal SIGTERM, esperar 90 segundos e depois enviar um sinal SIGKILL.

Se esse comportamento não funcionar para você, você pode atualizar seu aplicativo para alterar como ele responde a um sinal SIGTERM ou pode analisar as opções em páginas de manual referenciadas para personalizar o que acontece quando systemd emite um stop comando.

    
por Mark Stosberg 05.04.2017 / 13:44