Upstart:非启动过程后启动服务


11

在Ubuntu 10.04上,我需要使用upstart启动我的服务,但仅当mysql已启动并正在运行时。

问题是mysql本身不是由upstart处理的,所以我不能使用“ start on”功能。

我能做什么 ?

Answers:


15

您有几种选择:

1)通过发出事件使mysql通知Upstart它已经启动

initctl emit mysql-started”或类似。

这可以通过将initctl调用添加到中来处理/etc/init.d/mysql

2)从正常的SysV运行级别禁用mysql并创建一个包装器Upstart作业来启动它(这不能解决停止-只是一个例子):

cat >>/etc/init/mysql-sysv.conf<<EOT
  # wait for SysV job to finish
  start on stopped rc
  exec /etc/init.d/mysql start
EOT

然后,完成工作“ start on started mysql-sysv”。

这里的问题是,如果有人(或自动使用某些系统工具)将/etc/rc?.d链接重新添加到原始/etc/init.d/mysql服务脚本中,您将遇到麻烦。此外,您可能会发现,直到主pid启动一段时间,mysql才真正准备就绪。数据库存在问题,因为即使它们已经启动(转换日志重播等),它们也可能需要一些时间才能“联机”。

3)创建一个“在停止的rc上启动”的新贵作业(“ waiter”)(即,在所有SysV作业都声称已完成时启动),然后轮询等待mysql准备就绪,然后退出。让您的工作“在停止的服务员上启动”。

4)将mysql转换为Upstart作业(最佳选择)。这里有一个新贵的mysql配置的起点:https : //github.com/devo-ps/init-scripts/tree/master/mysql/ubuntu


1
环顾四周后,此答案总结了我的所有选择。另外还要感谢您指出“启动mysql”与mysql实际可用时间之间的差距。让我们看看#4是否已经在某个地方尝试过。
Falken 2012年

选项3要求“在已启动的服务员上启动”。没有停止。
adeandrade 2014年

选项1非常适合我们的模型!我们首先通过运行python脚本从配置服务器下载所有新贵脚本os.system('/sbin/initctl emit consul-finished'),然后通过start on consul-finished
CMag 16'Jan

谢谢你,我的朋友!基本上,我最终不得不sed替换initctl emit cloud-init-finished了sysv服务才能进行挂接
Jose Alban


-1

怎么样使用

pre-start exec /etc/init.d/mysql start

在您的新贵工作中!


...这不会在mysql启动时神奇地启动upstart作业。
适配器

是的,那不是你问的!!!您要求其他方法。至少我是这样理解的
卡吉2012年

我的暴发户应该监视mysql并在发生故障时发送通知。我觉得通过监控工作有点unconfortable启动mysql的
法尔肯

我不认为这是完全错误的。我做这样的事情:如果启动前脚本!/etc/init.d/rabbitmq服务器状态&> / dev / null; 然后/etc/init.d/rabbitmq-server启动结束脚本
maxadamo '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.