Upstart:在运行级别 [016] 停止 vs 在启动 rc RUNLEVEL=[016] 时停止

Upstart:在运行级别 [016] 停止 vs 在启动 rc RUNLEVEL=[016] 时停止

因此,我正在为 mysql 编写一个 upstart 初始化脚本。应该很简单,对吧?我的停止节如下所示:

kill timeout 30
stop on runlevel [016]

shutdown now -r和mysql大喊我的MyISAM表崩溃了,就像我kill -9的 mysql 进程崩溃了一样。嘘。Upstart 似乎没有等待 mysql 退出后再重新启动。在 Google 上搜索后,我发现此链接建议我这样做:

stop on starting rc RUNLEVEL=[016]

事实上,这似乎解决了问题。

但是:WFT?本质上,我想确保在尝试卸载本地文件系统之前 mysql 已停止。这是正确的做法吗?为什么我的stop on runlevelstanza 在切换运行级别之前不等待 mysql 停止?

并且:你知道,这个有记录吗?

答案1

这个问题实际上是由 Upstarts 在 Ubuntu 上处理 Upstart 作业和 SystemV 服务时的灵活性引起的。

有关事件的信息,最好查看系统上的手册页。如果您运行的是 Ubuntu Natty 或更新版本,您现在将拥有 upstart-events(7):

man 7 upstart-events

这为您提供了大量信息。以下是该手册页(大部分)的在线版本:

http://upstart.ubuntu.com/cookbook/#ubuntu-well-known-events-ubuntu-specific

目前,Ubuntu 系统的关闭实际上是由 SysV 端的工作完成的(出于历史原因)。如果你“” stop on runlevel [016],你的工作将开始当该事件发出时停止runlevel。但是,如果耗时太长,系统V系统的一部分(/etc/init.d/*)实际上将接管控制并关闭系统。而如果你“ stop on starting rc RUNLEVEL=[016]”,暴发户(不是 SystemV)将运行你的工作,一旦 mysql 停止,然后继续启动SystemV关机序列。

Upstart Cookbook 包含很多类似这样的示例:

相关内容