Я создал сервис на 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 или является там более эффективным путем?
Как systemd
обрабатывает процессы остановки и убийства, описано в man systemd.service
и man systemd.kill
. Если вы не уверены, как работает конкретная директива, например ExecStop=
, вы можете найти нужную справочную страницу, которая документирует с помощью man systemd.directives
.
Документация там объясняет, что поведение по умолчанию - отправка сигнала SIGTERM, ожидание 90 секунд и затем отправка сигнала SIGKILL.
Если это поведение не работает для вас, вы можете обновить свое приложение, чтобы изменить его реакцию на сигнал SIGTERM, или вы можете просмотреть параметры в справочных страницах, на которые ссылаются, чтобы настроить то, что происходит, когда systemd
выдает stop
] команда.