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

Nat*_*ate 6 ubuntu upstart runlevel

所以,我正在为 mysql 编写一个新贵的初始化脚本。应该是微不足道的吧?我的停止节看起来像:

kill timeout 30
stop on runlevel [016]
Run Code Online (Sandbox Code Playgroud)

shutdown now -r和 mysql 大喊我的 MyISAM 表崩溃了,就像kill -9我的 mysql 进程一样。嘘。新贵似乎没有在重新启动之前等待 mysql 退出。在谷歌上的一些搜索发现我这个链接建议我这样做,而不是:

stop on starting rc RUNLEVEL=[016]
Run Code Online (Sandbox Code Playgroud)

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

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

并且:这是你知道的,在任何地方都有记录吗?

小智 6

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

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

man 7 upstart-events
Run Code Online (Sandbox Code Playgroud)

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

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

目前,Ubuntu 系统的关闭实际上是由工作的 SysV 方面完成的(由于历史原因)。如果您使用“ stop on runlevel [016]”,则在发出该事件时您的工作将开始停止runlevel。但是,如果时间过长,系统 ( )的SystemV部分/etc/init.d/*将实际控制并关闭系统。然而,如果您使用“ stop on starting rc RUNLEVEL=[016]”,Upstart(不是 SystemV)将运行您的作业,一旦 mysql 停止,则继续启动 SystemV 关闭序列。

Upstart Cookbook 包含很多这样的例子: