Come dipendere da un processo di avvio da uno script init su Ubuntu 12.04


10

Sto usando Ubuntu 12.04 LTS e questo sistema utilizza principalmente lavori di avvio. Sfortunatamente il mio sistema dipende anche da un server dbmail compilato manualmente , che ha solo uno script init, ma nessuno script upstart.

Usando update-rc.d dbmail defaultsho installato dbmail per tutti i runlevel, ma sfortunatamente viene avviato prima che MySQL sia attivo, quindi il demone muore di nuovo. Ho anche provato a spostarlo su S90 o simili, tuttavia MySQL non è disponibile quando viene eseguito lo script.

Ho tentato di aggiungere una dipendenza all'intestazione LSB dello script, come segue:

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

Sfortunatamente lo script sembra ancora essere avviato prima di MySQL. Sono abituato a script init vecchio stile, non per avviare lavori, quindi sono un po 'confuso qui. Come posso aggiungere la dipendenza o come posso avviare il mysqllavoro prima dello dbmailscript di init?

Come posso controllare / vedere l'ordine di avvio preso per i lavori + script init durante l'avvio? C'è uno strumento per questo?

L'avvio manuale dello script da una shell dopo l'avvio funziona correttamente, poiché MySQL è già in esecuzione.


Ciò che ha funzionato come una brutta soluzione è stato l'aggiunta di un "sleep 3" nella funzione "start ()" dello script init. Ma deve esserci un modo più pulito, questo sta solo abusando di una condizione di gara e mi piacerebbe davvero risolverlo nel modo giusto.
Martin C.

Risposte:


12

Penso che se si esegue /etc/init.d/dbmail startda /etc/rc.local, inizierà dopo tutti i lavori di upstart / altri script di init.

Tuttavia, probabilmente risolverei questo problema aggiungendo un nuovo lavoro di avvio a /etc/init/dbmail.conf. Di solito gli script init.d hanno un sacco di codice per controllare lo stato, ecc., Che upstart gestisce per te. Potrebbe essere semplice come:

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

Oppure, puoi probabilmente usare lo script init esistente in questo modo:

start on started mysql
pre-start script
  /etc/init.d/dbmail start
end script
post-stop script
  /etc/init.d/dbmail stop
end script
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.