如何停止systemd服务

22

我正在尝试为Flume创建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

如何停止 Flume 服务?我已经启动了它,但如何将其停止?

在这种情况下,我不得不使用 PID 杀掉服务。

谢谢

3个回答

32

您只需执行 systemctl stop flume-ng.service。当执行时,默认操作是发送 SIGTERM 信号到主进程并等待一个可配置的时间,以查看进程是否已终止。如果进程没有终止,则 systemd 发送 SIGKILL 信号来完成任务。如果主进程已经分叉出其他进程,则 systemd 也会关闭它们,因为它们都位于同一个 cgroup 中。

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


18
你需要在[Service]部分添加ExecStop选项,并加入你想使用的停止服务的命令。
类似这样:
[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 以获取可用于控制该服务的完整选项集。

0

ExecStop 在我看来是不够的。 同样重要的是 KillSignal=。你在这里使用的信号应该是你想要内部处理并安全退出应用程序的信号。 如果 ExecStop= 未能退出进程,systemd 将使用相同的信号来杀死你的应用程序。作为最后手段,systemd 可以使用 SIGKILL 来无条件地杀死进程,以便继续进行系统关机。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接