Приложение C++, которое бежит за начальной загрузкой, когда определенному сервису включают, не может быть остановлено с остановкой systemctl

Я создал сервис на Ubuntu 16.04 для запущения приложения C++ после каждой начальной загрузки. Сервисный файл единицы я создал и сохранил его под/etc/systemd/system/, следует (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

script.sh содержит следующее:

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

То, когда мое приложение C++ работает, и я даю остановку systemctl npt.service, команда не делает, заканчивает ее выполнение, и приложение все еще работает. Я должен дать аргумент в execstop поле, которое уничтожит определенный pid или является там более эффективным путем?

0
задан 4 April 2017 в 09:36

1 ответ

Как systemd обрабатывает процессы остановки и убийства, описано в man systemd.service и man systemd.kill. Если вы не уверены, как работает конкретная директива, например ExecStop=, вы можете найти нужную справочную страницу, которая документирует с помощью man systemd.directives.

Документация там объясняет, что поведение по умолчанию - отправка сигнала SIGTERM, ожидание 90 секунд и затем отправка сигнала SIGKILL.

Если это поведение не работает для вас, вы можете обновить свое приложение, чтобы изменить его реакцию на сигнал SIGTERM, или вы можете просмотреть параметры в справочных страницах, на которые ссылаются, чтобы настроить то, что происходит, когда systemd выдает stop ] команда.

0
ответ дан 3 November 2019 в 12:36

Другие вопросы по тегам:

Похожие вопросы: