Відповіді:
У вас є кілька варіантів:
1) змусити mysql повідомити Upstart про те, що він розпочався, випускаючи подію
initctl emit mysql-started
"або подібне.
Це можна вирішити, додавши initctl
виклик до /etc/init.d/mysql
.
2) Вимкніть mysql із звичайних рівнів SysV та створіть обгорткове завдання 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 насправді не готовий до деякого часу після того, як почався його основний pid. Бази даних є проблематичними, оскільки вони можуть зайняти деякий час, щоб “зайти в Інтернет” навіть після їх запуску (повтор журналу транзакцій тощо).
3) Створіть початкову роботу ("офіціант"), яка виконує "запуск на зупиненому rc" (тобто запуск, коли всі завдання SysV заявили, що завершено), а потім опитування, які очікують, що програма mysql стане готова, а потім закривається. Нехай ваша робота "почнеться на зупиненого офіціанта".
4) Перетворити mysql в завдання Upstart (найкращий варіант). Тут є відправна точка для початкової конфігурації mysql тут: https://github.com/devo-ps/init-scripts/tree/master/mysql/ubuntu
os.system('/sbin/initctl emit consul-finished')
, а потім запускаємо інші сервісиstart on consul-finished
initctl emit cloud-init-finished
сервіс sysv, щоб мати можливість підключитися
Я пропоную розпочати свою роботу на початковому етапі після того, як всі незавершені завдання будуть закінчені:
start on started rc
/etc/init/rc.conf
це те, що запускає нестандартні завдання зсередини.
Реквізит: /server//a/533481
Як щодо використання
pre-start exec /etc/init.d/mysql start
всередині вашої початкової роботи!