Jak polegać na zadaniu wstępnym ze skryptu inicjującego na Ubuntu 12.04

10

Korzystam z Ubuntu 12.04 LTS i ten system wykorzystuje przede wszystkim zadania upstart. Niestety mój system zależy również od ręcznie skompilowanego serwera dbmail , który ma tylko skrypt inicjujący, ale nie ma skryptu wstępnego.

Za pomocą update-rc.d dbmail defaultszainstalowałem dbmail dla wszystkich poziomów pracy, ale niestety jest on uruchamiany przed uruchomieniem MySQL, więc demon ponownie umiera. Próbowałem także przenieść go do S90 lub podobnej, ale MySQL nie jest dostępny po uruchomieniu skryptu.

Próbowałem dodać zależność do nagłówka LSB skryptu w następujący sposób:

#!/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

Niestety skrypt nadal wydaje się być uruchamiany przed MySQL. Jestem przyzwyczajony do starych skryptów inicjujących, a nie do rozpoczynania zadań, więc jestem trochę zdezorientowany. Jak mogę dodać zależność lub jak mogę rozpocząć mysqlzadanie przed dbmailskryptem init?

Jak mogę sprawdzić / zobaczyć kolejność uruchamiania przyjętą dla zadań + skryptów inicjujących podczas rozruchu? Czy jest na to narzędzie?

Ręczne uruchamianie skryptu z powłoki po uruchomieniu działa dobrze, ponieważ MySQL już działa.

Martin C.
źródło
To, co działało jako brzydkie obejście, polegało na dodaniu „sleep 3” w funkcji „start ()” skryptu init. Ale musi istnieć czystszy sposób, to tylko nadużywanie warunków wyścigu i naprawdę chciałbym to naprawić we właściwy sposób.
Martin C.

Odpowiedzi:

12

Myślę, że jeśli uruchomić /etc/init.d/dbmail startz /etc/rc.local, rozpocznie po wszystkich zadań nowobogackich / innych skryptów startowych.

Prawdopodobnie naprawiłbym to, dodając nowe zadanie upstart w /etc/init/dbmail.conf. Zwykle skrypty init.d zawierają dużo kodu do sprawdzania statusu itp., Który obsługuje dla Ciebie upstart. Może to być tak proste, jak:

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

Lub prawdopodobnie możesz użyć istniejącego skryptu inicjującego w następujący sposób:

start on started mysql
pre-start script
  /etc/init.d/dbmail start
end script
post-stop script
  /etc/init.d/dbmail stop
end script
Kevin McCormick
źródło