我在 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 stop npt.service,该命令不会结束其执行,应用程序仍在运行。我是否应该在 execstop 字段中给出一个将终止特定 pid 的参数,或者是否有更有效的方法?
答案1
和systemd
中介绍了如何处理停止和终止进程。如果您不确定某个特定指令的工作原理,可以找到带有文档的正确手册页。man systemd.service
man systemd.kill
ExecStop=
man systemd.directives
那里的文档将解释默认行为是发送 SIGTERM 信号,等待 90 秒,然后发送 SIGKILL 信号。
如果此行为对您不起作用,您可以更新您的应用程序以更改其对 SIGTERM 信号的响应方式,或者您可以查看参考手册页中的选项来自定义systemd
发出stop
命令时发生的情况。