在 Ubuntu 10.04 上,我需要使用 upstart 启动我的服务,但仅当 mysql 启动并运行时才需要。
问题是 mysql 本身不由 upstart 处理,所以我无法使用“启动”功能。
我能做些什么 ?
答案1
您有以下几种选择:
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
。此外,您可能会发现 mysql 实际上直到一段时间才准备就绪后其主进程标识符已启动。数据库存在问题,因为即使已启动(事务日志重放等),它们也可能需要一些时间才能“上线”。
3) 创建一个 upstart 作业(“waiter”),该作业执行“在 rc 停止时启动”(即,当所有 SysV 作业都声称已完成时启动),然后轮询等待 mysql 准备就绪,然后退出。让您的作业“在 waiter 停止时启动”。
4) 将 mysql 转换为 Upstart 作业(最佳选择)。这里有一个 upstart mysql 配置的起点:https://github.com/devo-ps/init-scripts/tree/master/mysql/ubuntu
答案2
我建议你从新贵工作开始全部非 upstart 作业已完成:
start on started rc
/etc/init/rc.conf
是从 upstart 内部启动非 upstart 任务的东西。
答案3
如何使用
pre-start exec /etc/init.d/mysql start
在你的新贵工作中!