【问题标题】:How stop systemd service如何停止 systemd 服务
【发布时间】:2017-03-17 14:50:32
【问题描述】:

我正在尝试为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 杀死。

谢谢

【问题讨论】:

    标签: linux systemd startupscript


    【解决方案1】:

    你可以直接执行systemctl stop flume-ng.service。执行时,默认操作是将SIGTERM 发送到主进程并等待到可配置的时间以查看进程是否已终止。如果进程没有终止,则 systemd 发送 SIGKILL 信号来完成这项工作。如果主进程已经派生出其他进程,systemd 也会将它们删除,因为它们都生活在同一个 cgroup 中。

    你不需要有ExecStop= 指令,除非你有不同的方式来关闭你的服务。

    【讨论】:

      【解决方案2】:

      您需要在[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 的手册,了解可用于控制服务的全套选项。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-06-24
          • 1970-01-01
          • 2015-05-16
          • 1970-01-01
          • 1970-01-01
          • 2019-04-17
          • 1970-01-01
          相关资源
          最近更新 更多