如何在 Ubuntu 12.04 上的 init 脚本中依赖 upstart 作业

如何在 Ubuntu 12.04 上的 init 脚本中依赖 upstart 作业

我使用的是 Ubuntu 12.04 LTS,这个系统主要使用 upstart 作业。不幸的是,我的系统还依赖于手动编译的数据库邮件服务器,只有一个 init 脚本,但没有 upstart 脚本。

我为所有运行级别安装update-rc.d dbmail defaults了 dbmail,但不幸的是它在 MySQL 启动之前就启动了,所以守护进程又死机了。我还尝试将其移动到 S90 或类似版本,但运行脚本时 MySQL 仍然不可用。

我尝试向脚本的 LSB 标头添加依赖项,如下所示:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          dbmail
# Required-Start:    $local_fs $remote_fs $syslog $network mysql
# Required-Stop:     $local_fs $remote_fs $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start dbmail services
# Description:       Run network services provided by dbmail such as
#                    imap-server, pop3-server, lmtp-server, timsieve-server
### END INIT INFO

不幸的是,该脚本似乎仍然在 MySQL 之前启动。我习惯使用老式的 init 脚本,而不是 upstart 作业,所以我在这里有点困惑。我如何添加依赖项或如何让作业在 init 脚本mysql之前启动dbmail

如何检查/查看启动过程中作业 + 初始化脚本的启动顺序?有工具可以实现这个吗?

启动后从 shell 手动启动脚本可以正常工作,因为 MySQL 已经在运行。

答案1

我认为如果你/etc/init.d/dbmail start从运行/etc/rc.local,它将在你所有的 upstart 作业/其他初始化脚本之后启动。

不过,我可能会通过在 处添加一个新的 upstart 作业来解决这个问题/etc/init/dbmail.conf。通常 init.d 脚本有很多用于检查状态等的代码,这些代码 upstart 会为您处理。它可能很简单:

start on started mysql
exec /usr/local/bin/dbmail

或者,您也可以使用现有的初始化脚本,如下所示:

start on started mysql
pre-start script
  /etc/init.d/dbmail start
end script
post-stop script
  /etc/init.d/dbmail stop
end script

相关内容