Cómo depender de un trabajo inicial desde un script de inicio en Ubuntu 12.04

10

Estoy usando Ubuntu 12.04 LTS y este sistema utiliza principalmente trabajos de arranque. Lamentablemente, mi sistema también depende de un servidor dbmail compilado manualmente , que solo tiene un script de inicio, pero no un script de inicio.

Utilizando update-rc.d dbmail defaultsinstalé dbmail para todos los niveles de ejecución, pero desafortunadamente se inició antes de que MySQL esté activo, por lo que el demonio muere nuevamente. También intenté moverlo a S90 o similar, todavía MySQL no está disponible cuando se ejecuta el script.

Intenté agregar una dependencia al encabezado LSB del script, de la siguiente manera:

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

Lamentablemente, la secuencia de comandos todavía parece iniciarse antes que MySQL. Estoy acostumbrado a las secuencias de comandos de inicio antiguas, no a las tareas iniciales, por lo que estoy un poco confundido aquí. ¿Cómo puedo agregar la dependencia o cómo puedo iniciar el mysqltrabajo antes del dbmailscript de inicio?

¿Cómo puedo verificar / ver el orden de inicio tomado para los trabajos + scripts de inicio durante el arranque? ¿Hay alguna herramienta para esto?

Iniciar el script manualmente desde un shell después del inicio funciona bien, ya que MySQL ya se está ejecutando.

Martin C.
fuente
Lo que funcionó como una solución fea fue agregar un "sueño 3" en la función "start ()" del guión de inicio. Pero debe haber una forma más limpia, esto es solo abusar de una condición de carrera y realmente me gustaría solucionarlo de la manera correcta.
Martin C.

Respuestas:

12

Creo que si ejecuta /etc/init.d/dbmail startdesde /etc/rc.local, comenzará después de todos sus trabajos de arranque / otros scripts de inicio.

Sin embargo, probablemente solucionaría esto agregando un nuevo trabajo de inicio en /etc/init/dbmail.conf. Por lo general, los scripts init.d tienen mucho código para verificar el estado, etc., que se encarga de usted. Puede ser tan simple como:

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

O bien, probablemente pueda usar el script de inicio existente como este:

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
fuente