GNU/Linux >> Tutoriels Linux >  >> Ubuntu

La meilleure façon de faire un crochet d'arrêt ?

É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] ou start 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.

Connexe :Comment verrouiller l'écran en utilisant le nouveau lockscreen depuis la ligne de commande ?

Modifié pour changer le niveau d'exécution 5 en S.


Ubuntu
  1. Centos - Le meilleur moyen d'ajouter une route permanente ?

  2. Meilleur moyen de monter un dossier distant ?

  3. Comment faire en sorte qu'un script shell s'exécute toujours en tant que root ?

  4. Ny Way pour rendre les applications installées par Snap plus natives?

  5. Commandes Linux "shutdown", "poweroff", "halt", "reboot"

Redémarrer la survie - Meilleures pratiques

Redémarrer la survie - Meilleures pratiques

Meilleure façon d'installer Docker sur Ubuntu 20.04 Linux

Quelle est la meilleure façon d'apprendre SELinux ?

Meilleur moyen de désactiver le swap sous Linux

Meilleur moyen de supprimer la commande d'arrêt, mais de continuer à redémarrer