如何停止systemd服务

时间:2016-11-03 21:13:33

标签: linux systemd startupscript

我正在尝试为水槽创建systemd服务文件,创建了/etc/systemd/system/flume-ng.service以及以下内容

[Unit]
Description=Apache Flume

[Service]
Environment=FLUME_CLASSPATH=/opt/flume/current/lib/
ExecStart=/usr/bin/nohup /usr/bin/flume-ng agent -c /etc/flume-ng/conf -f /etc/flume-ng/conf/flume.conf --name a1 &

[Install]
WantedBy=multi-user.target

启动水槽服务,但如何将其作为服务停止?

在这种情况下,我不得不用PID杀死。

感谢

3 个答案:

答案 0 :(得分:6)

您可以执行systemctl stop flume-ng.service。执行时,默认操作是将SIGTERM发送到主进程并等待可配置的时间以查看进程是否已终止。如果进程没有终止,则systemd发送执行该作业的SIGKILL信号。如果主进程已经分离出其他进程,systemd也将把它们关闭,因为它们都存在于同一个cgroup中。

除非您采用不同的方式关闭服务,否则不需要ExecStop=指令。

答案 1 :(得分:4)

您需要在ExecStop部分中添加[Service]选项,并使用您要用来停止服务的命令。

类似的东西:

[Service]
Environment=FLUME_CLASSPATH=/opt/flume/current/lib/
ExecStart=/usr/bin/nohup /usr/bin/flume-ng agent -c /etc/flume-ng/conf -f /etc/flume-ng/conf/flume.conf --name a1 &
ExecStop=/usr/bin/flume-ng agent stop

或任何命令停止flume-ng

然后,您可以使用systemctl stop flume-ng停止服务。

阅读https://www.freedesktop.org/software/systemd/man/systemd.service.html处的手册,了解可用于控制服务的全套选项。

答案 2 :(得分:0)

ExecStop 在我看来是不够的。 同样重要的是 KillSignal=。您在此处使用的信号应该是您希望在内部处理并安全退出应用程序的信号。 Systemd 将使用相同的方法杀死您的应用程序。如果 ExecStop= 未能退出进程,它将被 KillSignal 杀死。 systemd 的最后手段是使用 SIGKILL 并终止您的进程以继续系统关闭。