Upstart: démarrer le service après un processus non-upstart

11

Sur Ubuntu 10.04, je dois démarrer mon service avec upstart, mais uniquement lorsque mysql est opérationnel.

Le problème est que mysql lui-même n'est pas géré par upstart, donc je ne peux pas utiliser la fonction "start on".

Que puis-je faire ?

Falken
la source

Réponses:

15

Vous avez quelques options:

1) faire en sorte que mysql informe Upstart qu'il a commencé en émettant un événement

initctl emit mysql-started" ou similaire.

Cela pourrait être géré en ajoutant l' initctlinvocation à /etc/init.d/mysql.

2) Désactivez mysql à partir des niveaux d'exécution SysV normaux et créez un travail Upstart wrapper qui le démarre (pas cela ne gère pas l'arrêt - juste un exemple):

cat >>/etc/init/mysql-sysv.conf<<EOT
  # wait for SysV job to finish
  start on stopped rc
  exec /etc/init.d/mysql start
EOT

Ensuite, faites votre travail " start on started mysql-sysv".

Le problème ici est que vous rencontrerez des problèmes si quelqu'un (ou un outil système automatiquement) rajoute les /etc/rc?.dliens au /etc/init.d/mysqlscript de service d' origine . En outre, vous pouvez constater que mysql n'est réellement prêt que quelque temps après le démarrage de son pid principal. Les bases de données sont problématiques car elles peuvent mettre un certain temps à être "en ligne" même après leur démarrage (relecture du journal des transactions, etc.).

3) Créez un travail parvenu ("serveur") qui "démarre sur rc arrêté" (c'est-à-dire démarre lorsque tous les travaux SysV ont prétendu être terminés), puis interroge en attendant que mysql soit prêt, puis se termine. Demandez à votre travail de "démarrer sur un serveur arrêté".

4) Convertissez mysql en une tâche Upstart (la meilleure option). Il y a un point de départ pour une configuration mysql par ici: https://github.com/devo-ps/init-scripts/tree/master/mysql/ubuntu

jamesodhunt
la source
1
Après avoir regardé autour de moi, cette réponse résume toutes les options dont je dispose. Merci également d'avoir souligné l'écart entre "mysql démarré" et le moment où mysql est réellement disponible. Voyons si le # 4 a déjà été essayé quelque part.
Falken
L'option 3 requiert "démarrer sur serveur démarré". Pas arrêté.
adeandrade
l'option 1 correspond bien à notre modèle! Nous téléchargeons d'abord tous les scripts de os.system('/sbin/initctl emit consul-finished')démarrage à partir d'un serveur de configuration via un script python qui s'exécute , puis démarrons d'autres services parstart on consul-finished
CMag
Merci pour ça, mon ami! En gros, j'ai fini par devoir remplacer initctl emit cloud-init-finishedun service sysv pour pouvoir me connecter
Jose Alban
0

Je suggère de commencer votre travail parvenu après que tous les travaux non parvenus soient terminés:

start on started rc

/etc/init/rc.conf est la chose qui démarre les travaux non-upstart à partir de upstart.

Accessoires: /server//a/533481

Dave Gregory
la source
-1

Que diriez-vous d'utiliser

pre-start exec /etc/init.d/mysql start

à l'intérieur de votre emploi parvenu!

kaji
la source
... cela ne démarrera pas comme par magie le travail parvenu au démarrage de mysql.
adaptr
ouais ce n'est pas ce que tu as demandé !!! vous avez demandé l'inverse. C'est du moins ce que j'ai compris
kaji
Mon travail parvenu est censé surveiller mysql et envoyer des notifications s'il est en panne. Je me sens un peu mal à l'aise de lancer mysql via le travail de surveillance
Falken
Je ne pense pas que ce soit complètement faux. Je fais quelque chose comme ceci: script de pré-démarrage si! /etc/init.d/rabbitmq-server status &> / dev / null; puis /etc/init.d/rabbitmq-server start fi end script
maxadamo