web-dev-qa-db-fra.com

Le redémarrage est-il identique à init 6?

Le redémarrage est-il identique à init 6 pour Ubuntu?

J'utilise Ubuntu 12.04 sur Amazon EC2. Lorsque ssh'ed dans la boîte je peux taper runlevel et je reçois:

N 2

En regardant man reboot je vois que:

Lorsqu'il est appelé avec --force ou en niveaux d'exécution 0 ou 6, cet outil appelle l'appel système reboot (2) lui-même et redémarre directement le système. Sinon, cela appelle simplement l'outil shutdown (8) avec les arguments appropriés.

Si je lis man shutdown 8 je vois:

arrêt veille à ce que le système soit arrêté de manière sécurisée. Tous les utilisateurs connectés sont informés que le système est en panne et, dans les cinq dernières minutes de TIME, toute nouvelle connexion est empêchée.

Ma compréhension de base de la différence entre reboot et init 6 est la suivante:

  • Sur d'autres distributions et peut-être des distributions plus anciennes, reboot démonterait simplement les disques et actionnerait l'interrupteur d'alimentation sans exécuter aucun script d'arrêt.
  • init 6 exécutera tous les scripts d'arrêt dans /etc/init/rc.* car il réduit le niveau d'exécution du système
  • Sur les versions plus récentes d'Ubuntu, la commande reboot sans --force ou -f exécutera la commande shutdown, ce qui ferait en principe la même chose que init 6
  • Il est probablement préférable de prendre l'habitude d'utiliser init 6 au lieu de reboot car cela est plus sûr et fonctionnerait mieux en distribution croisée, mais le comportement par défaut de reboot a été modifié pour éviter les erreurs/la perte de données si quelqu'un l'utilise.

Est-ce à peu près correct? Si non, qu'est-ce qui me manque?

22
cwd

Il n'y a vraiment jamais de raison impérieuse d'utiliser init 6 au lieu de reboot, à moins que:

  • Pour une raison quelconque, l'exécutable reboot, ou est manquant.
  • Vous essayez délibérément d'éviter d'avertir les utilisateurs que le système est en panne.

reboot (tant que vous n’exécutez pas reboot --force) est en fait le moyen "plus doux" de fermer.

Considérer:

init 6 exécutera tous les scripts d'arrêt dans /etc/init/rc.* car il réduit le niveau d'exécution du système

Mais la commande reboot , appelée sans le drapeau --force, ne redémarre directement le système (via l'appel système reboot ) lorsque une de ces deux situations s'applique:

  • Le système est en niveau d'exécution 0 (mode utilisateur unique). Il n'y a donc aucune réduction du niveau d'exécution si peut se produire, de sorte qu'aucun script d'arrêt n'est exécuté automatiquement.
  • Le système est au niveau d'exécution 6. Ce que init 6 fait pour placer le système au niveau d'exécution 6. Là encore, l'exécution de init 6 n'empêchera pas l'exécution de la commande reboot.

Sinon, Sudo reboot est équivalent à Sudo shutdown -r now. Ceci fait toutes les bonnes choses que Sudo init 6 fait, mais aussi:

  • informe les utilisateurs que le système est en panne.
  • empêche les nouvelles connexions (même si elles ne réussiraient probablement pas de toute façon).
  • est plus intuitif et auto-documenté que Sudo init 6.

Si vous êtes sur un système avec seulement vous êtes connecté et uniquement des connexions locales, il n'y a rien de mal à utiliser init 6 pour redémarrer. Si c'est comme ça que vous préférez redémarrer, allez-y, allez-y ... vous ne faites rien de mal en le faisant. Mais rien de plus objectivement préférable de le faire de cette façon.

La propre documentation de init indique que ce n'est pas le moyen habituel d'arrêter ou de redémarrer le système. Considérez que lorsque init est exécuté par l'utilisateur (comme lorsque vous exécutez Sudo init 6), il exécute en fait telinit (voir man init ). telinit est ce qui change réellement les niveaux d'exécution. Et man telinit nous dit:

Normalement, vous utiliseriez l'outil shutdown (8) pour arrêter ou redémarrer le système, ou pour le ramener au mode mono-utilisateur.

22
Eliah Kagan