因此,我正在为 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 runlevel
stanza 在切换运行级别之前不等待 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 包含很多类似这样的示例: