如何使用 upstart 指定守护程序关闭命令?

ams*_*ams 9 upstart

在新贵配置中,我如何定义应该使用什么命令来关闭服务器。假设我有一个有两个独立进程的守护进程。

  • startup.sh - 启动服务器
  • shutdown.sh - 关闭服务器

假设我有一个看起来像这样的 upstart 文件。

description "Some Example Service"
author "Me"

start on runlevel [2345]
stop on runlevel [016]
respawn

exec startup.sh 
Run Code Online (Sandbox Code Playgroud)

我如何告诉暴发户它应该shutdown.sh在关闭服务器时调用?新贵通常如何期望关闭守护程序?

roa*_*dmr 10

使用exec启动过程是好的,但停车时,如果你绝对需要运行命令的具体脚本或组,您可以使用 pre-stop节。

pre-stop exec shutdown.sh
Run Code Online (Sandbox Code Playgroud)

我假设您已经尝试过只使用 exec 节并且它不起作用,可能是因为您的守护进程需要一些专门的清理。请注意,行为良好的守护进程应该在作业停止时从 upstart 接收信号,如果它们适当地处理信号,则不需要额外的清理。

停止作业涉及向其发送 SIGTERM。如果在 SIGTERM 之前需要做任何事情,请在这里做。可以说,服务应该非常优雅地处理 SIGTERM,所以这不是必要的。

如果有任何关键的事情,比如刷新到磁盘,并且提高终止超时不是一个选项,那么 pre-stop 不是一个糟糕的地方

另请阅读本节,了解停止作业时会发生什么的整个工作流程。请注意 pre-stop 何时运行,以及之后如何向进程发送信号,这就是 upstart 正常处理停止作业的方式。

我的来源是官方的 Upstart 食谱:http : //upstart.ubuntu.com/cookbook/