0

我正在为 smartd 编写一个 SMF 配置文件,我在各种示例中看到我有两个选项:使用 PID 文件,如(来自 apcupsd)

  echo "Stopping apcupsd power management   ...\c"
  if [ -f   ${APCPID} ]; then
    THEPID=`cat ${APCPID}`
    kill ${THEPID} || return=" Failed."
    rm -f ${APCPID}
  else
    return=" Failed."
  fi
  rm -f ${LOCKDIR}/apcupsd
  echo "$return"

或者完全跳过“停止”方法,例如使用这个 SMF 生成器而不提供任何超出最小“:kill”命令的停止脚本。

在这两种情况下,服务看起来都被杀死了。那为什么要使用停止方法呢?

在我的具体情况下, smartd 默认运行时没有 PID,但我可以选择更改行为。

4

1 回答 1

0

在 SMF 方法命令中,:kill仅表示 .... 就是这样。kill与从 shell执行命令的效果相同,除了 SMF 确保这是被终止的合同,即合同的所有进程都死亡。

您可以:kill在“smf_method”的手册页中阅读

如果您不指定任何

 <exec_method type='method' name='stop'  ..../>

完全在您的清单中,然后 SMF 将:kill -SIGTERM用作停止命令。这适用于许多服务。通常,您可以拥有一个不需要很多行的非常简单的 SMF 清单。

但是,在某些情况下,您可能需要更精细的停止方法,在这种情况下,您必须编写自己的代码。你的不是这样的情况。您的示例只是简单地使用kill,因此它不会做任何事情,而 SMF 不会自己做。你不需要它!

一些示例使您想到许多人想要使用显式“停止”方法的场景:

  • 该服务带有它自己的启动/停止/重启脚本。在这种情况下最好使用它,除非您了解它所做的事情是微不足道的并且也可以由 SMF 处理。

  • 该服务有另一种关闭方法,允许它干净地关闭。例如,Tomcat 在 localhost 上打开一个侦听端口,当您将文本“SHUTDOWN”发送到该端口时,Tomcat 将彻底关闭。

  • 服务可能并不总是对 kill 命令做出反应。它可能需要更严厉的方法,例如首先执行kill(很好的杀死),如果在 X 秒后没有杀死进程,那么kill -9应该尝试。

于 2018-04-29T12:24:24.357 回答