我确实安装了一个服务器,我始终需要在终端中运行它。命令如下
software server
现在我想让它在后台运行,而不需要保持窗口打开。我考虑创建一个服务。我的软件服务看起来像
[Unit]
Description=Software Server
[Service]
Type=simple
ExecStart=/opt/software/bin/software server
但是,在所有服务和指南中都需要定义 ExecStop。如果服务器不支持,我该如何做?我可以在停止时终止进程吗?
任何关于如何解决我的问题的建议(不一定是服务)
答案1
https://www.freedesktop.org/software/systemd/man/systemd.service.html
相关部分,重点是我的:
执行停止=
执行命令以停止通过 ExecStart= 启动的服务。此参数接受多个命令行,遵循与上面 ExecStart= 描述的相同方案。是否使用此设置是可选的。 运行此选项中配置的命令后,即表示服务停止,并且其剩余的任何进程都将根据 KillMode= 设置终止(参见 systemd.kill(5))。 如果未指定此选项,则在请求停止服务时通过发送 KillSignal= 或 RestartKillSignal= 中指定的信号来终止进程。支持说明符和环境变量替换(包括 $MAINPID,参见上文)。
请注意,通常仅为此设置指定一个命令是不够的,该命令仅要求服务终止(例如,通过向其发送某种形式的终止信号),但不等待它这样做。由于服务的其余进程在命令退出后立即根据上述 KillMode= 和 KillSignal= 或 RestartKillSignal= 被终止,这可能不会导致干净停止。因此,指定的命令应该是同步操作,而不是异步操作。
和https://www.freedesktop.org/software/systemd/man/systemd.kill.html#告诉我们:
默认为 SIGTERM。
因此:如果您不指定 ExecStop 并运行systemctl stop software_server
SystemD,将执行相当于 的操作kill -15
。