6 votes

Upstart : stop on runlevel [016] vs stop on starting rc RUNLEVEL=[016]

Donc, je travaille sur un upstart init script pour mysql. Ça devrait être trivial, non ? Mon stanza d'arrêt ressemble à :

kill timeout 30
stop on runlevel [016]

I shutdown now -r et mysql me dit que mes tables MyISAM ont été détruites, comme je l'avais prévu. kill -9 de mon processus mysql. Boo. Upstart ne semble pas attendre que mysql se termine avant de redémarrer. Une recherche sur Google m'a permis de trouver ce lien suggérant que je le fasse, à la place :

stop on starting rc RUNLEVEL=[016]

et en effet, cela semble régler le problème.

Mais : WFT ? Essentiellement, je veux m'assurer que mysql est arrêté avant d'essayer de démonter les systèmes de fichiers locaux. Est-ce la bonne façon de procéder ? Pourquoi mon stop on runlevel La stanza n'attend pas que mysql s'arrête avant de changer de niveau d'exécution ?

Et : est-ce que c'est documenté quelque part ?

6voto

Christophe Eblé Points 4606

Le problème qu'il rencontre est en fait causé par la flexibilité de Upstart dans la gestion des tâches Upstart et des services SystemV sur Ubuntu.

Pour obtenir des informations sur les événements, vous pouvez consulter les pages de manuel de votre système. Si vous utilisez Ubuntu Natty ou une version plus récente, vous aurez maintenant upstart-events(7) :

man 7 upstart-events

Cela vous donne beaucoup d'informations. Voici une version en ligne de (la plupart de) cette page de manuel :

http://upstart.ubuntu.com/cookbook/#ubuntu-well-known-events-ubuntu-specific

Actuellement, l'arrêt d'un système Ubuntu est en fait finalisé par le côté SysV du travail (pour des raisons historiques). Si vous ' stop on runlevel [016] ', votre travail sera commencer pour s'arrêter quand ce runlevel est émis. Toutefois, si cela prend trop de temps, le SystemV partie du système ( /etc/init.d/* ) prendra effectivement le contrôle et arrêtera le système. Alors que, si vous ' stop on starting rc RUNLEVEL=[016] ', Upstart (pas SystemV) va exécuter votre travail et une fois que mysql s'est arrêté puis continuez pour lancer la séquence d'arrêt de SystemV.

Le livre de recettes Upstart contient beaucoup d'exemples comme celui-ci :

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X