如何在Ubuntu 12.04上的init脚本中依赖新贵工作


10

我正在使用Ubuntu 12.04 LTS,该系统主要使用新贵作业。不幸的是,我的系统还依赖于手动编译的dbmail服务器,该服务器只有一个初始化脚本,而没有新贵脚本。

使用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之前启动。我习惯了老式的初始化脚本,而不是新手,所以在这里我有些困惑。如何添加依赖关系或如何使mysql作业在dbmail初始化脚本之前启动?

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

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


丑陋的解决方法是在初始化脚本的“ start()”函数中添加“ sleep 3”。但是必须有一种更清洁的方法,这只是在滥用比赛条件,我真的很想以正确的方式解决此问题。
Martin C.

Answers:


12

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

但是,我可能会通过在处添加新的新贵工作来解决此问题/etc/init/dbmail.conf。通常,init.d脚本包含许多用于检查状态等的代码,这些代码由新贵为您处理。它可能很简单:

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
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.