Étant donné qu'Ubuntu s'appuie sur upstart depuis un certain temps maintenant, j'aimerais utiliser un travail upstart pour arrêter gracieusement certaines applications lors de l'arrêt ou du redémarrage du système. Il est essentiel que l'arrêt ou le redémarrage du système soit bloqué jusqu'à ce que ces applications soient fermées.
Les applications seront démarrées manuellement à l'occasion, et à l'arrêt du système, elles devraient automatiquement être terminées par un script (que j'ai déjà). Étant donné que les applications ne peuvent pas être arrêtées de manière fiable sans (presque tous) les autres services en cours d'exécution, l'arrêt des applications doit être effectué avant le début du reste de l'arrêt.
Je pense que je peux résoudre ce problème par un travail parvenu qui sera déclenché à l'arrêt, mais je ne sais pas quels événements je dois utiliser de quelle manière. Jusqu'à présent, j'ai lu les déclarations suivantes (en partie contradictoires) :
- Il n'y a pas d'événement d'arrêt général dans upstart
- Utilisez une strophe telle que
start on starting shutdown
dans la définition du poste - Utilisez une strophe telle que
start on runlevel [06S]
dans la définition du poste - Utilisez une strophe comme
start on starting runlevel [06S]
dans la définition du poste - Utilisez une strophe comme
start on stopping runlevel [!06S]
dans la définition du poste
De ces recommandations, les questions suivantes se posent :
- Y a-t-il ou non un événement d'arrêt général dans le démarrage d'Ubuntu ?
- Quelle est la méthode recommandée pour mettre en œuvre un "hook d'arrêt" ?
- Quand les événements de niveau d'exécution [x] sont-ils déclenchés ? est-ce en entrant dans le niveau d'exécution ou en entrant dans le niveau d'exécution ?
- Pouvons-nous utiliser quelque chose comme
start on starting runlevel [x]
oustart on stopping runlevel [x]
? - Quelle serait la meilleure solution à mon problème ?
Merci beaucoup
Réponse acceptée :
starting
et runlevel
sont des événements distincts, vous ne pouvez donc pas dire de manière significative starting runlevel N
.
Le runlevel N
L'événement est émis au début de l'entrée dans le niveau d'exécution. Si vous start on runlevel N
alors votre tâche s'exécute à l'entrée. La façon de s'exécuter lorsque l'entrée au niveau d'exécution est terminée est run on started rc RUNLEVEL=N
.
Si je comprends bien, vous avez besoin d'un start on runlevel [06S]
faire ce que tu veux; il devrait en théorie s'exécuter avant que quoi que ce soit d'autre ne soit arrêté. Pour un contrôle plus précis, vous pouvez utiliser start on stopping apache or stopping mysql or ...
afin que votre tâche s'exécute avant que l'une d'elles ne soit autorisée à être arrêtée.
Modifié pour changer le niveau d'exécution 5 en S.