我使用的是 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