Comment dépendre d'un travail parvenu à partir d'un script d'initialisation sur Ubuntu 12.04

10

J'utilise Ubuntu 12.04 LTS et ce système utilise principalement des travaux parvenus. Malheureusement, mon système dépend également d'un serveur dbmail compilé manuellement , qui n'a qu'un script init, mais pas de script upstart.

En utilisant update-rc.d dbmail defaultsj'ai installé dbmail pour tous les niveaux d'exécution, mais malheureusement il est démarré avant que MySQL ne soit en place, donc le démon meurt à nouveau. J'ai également essayé de le déplacer vers S90 ou similaire, toujours MySQL n'est pas disponible lorsque le script est exécuté.

J'ai tenté d'ajouter une dépendance à l'en-tête LSB du script, comme suit:

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

Malheureusement, le script semble toujours être démarré avant MySQL. Je suis habitué aux scripts d'initialisation à l'ancienne, pas aux nouveaux arrivants, donc je suis un peu confus ici. Comment puis-je ajouter la dépendance ou comment démarrer le mysqltravail avant le dbmailscript init?

Comment puis-je vérifier / voir l'ordre de démarrage pris pour les travaux + scripts d'initialisation lors du démarrage? Existe-t-il un outil pour cela?

Le lancement manuel du script à partir d'un shell après le démarrage fonctionne correctement, car MySQL est déjà en cours d'exécution.

Martin C.
la source
Ce qui a fonctionné comme une solution de contournement laide consistait à ajouter un "sleep 3" dans la fonction "start ()" du script init. Mais il doit y avoir un moyen plus propre, c'est simplement abuser d'une condition de course et j'aimerais vraiment résoudre ce problème de la bonne manière.
Martin C.

Réponses:

12

Je pense que si vous exécutez à /etc/init.d/dbmail startpartir de /etc/rc.local, il démarrera après tous vos travaux parvenus / autres scripts d'initialisation.

Cependant, je réglerais probablement ce problème en ajoutant un nouveau poste parvenu à /etc/init/dbmail.conf. Habituellement, les scripts init.d ont beaucoup de code pour vérifier l'état, etc., que upstart gère pour vous. Cela pourrait être aussi simple que:

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

Ou, vous pouvez probablement utiliser le script init existant comme ceci:

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
la source