Как зависеть от выскочки из сценария инициализации в Ubuntu 12.04

10

Я использую Ubuntu 12.04 LTS, и эта система использует в основном upstart-задания. К сожалению, моя система также зависит от скомпилированного вручную сервера 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 уже работает.

Мартин С.
источник
То, что работало как уродливый обходной путь, это добавление «sleep 3» в функцию «start ()» сценария инициализации. Но должен быть более чистый путь, это просто злоупотребление состоянием гонки, и я действительно хотел бы исправить это должным образом.
Мартин С.

Ответы:

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
Кевин Маккормик
источник