GNU/Linux >> Tutoriels Linux >  >> Linux

La différence entre ces commandes pour faire tomber un serveur Linux ?

Lire « Quelle est la différence entre les commandes Halt et Shutdown ? » , j'ai généralement une idée de ce que fait la commande shutdown, avec ou sans les options -h/-r.

La commande "halt" éteint le système au niveau d'exécution 0 du
système.

La commande "shutdown" effectue une mise hors tension du système au niveau d'exécution
1 sans commande -h ou -r.

Qu'en est-il de la commande "poweroff" qui passe en run-level 0 ou 1 ?
Est-ce la seule différence principale entre ces trois commandes ?

Réponse acceptée :

Et maintenant, la réponse systemd.

Vous utilisez, selon le tag de votre question, Red Hat Enterprise Linux. Depuis la version 7, cela utilise systemd. Aucune des autres réponses n'est correcte pour le monde de systemd; ni même certaines des hypothèses de votre question.

  • Oubliez les niveaux d'exécution ; ils existent, mais uniquement en tant que cales de compatibilité. La documentation systemd indique que le concept est "obsolète". Si vous commencez à apprendre ce genre de choses sur un système d'exploitation systemd, ne commencez pas par là.
  • Oubliez la page de manuel citée par marcelm ; ce n'est pas du tout le bon ensemble d'outils, et c'est une description de la commande d'un autre ensemble d'outils, incorrecte pour systemd. C'est celui du halt commande de van Smoorenburg "System 5" init utilitaires.
  • Ignorez les instructions qui /sbin/halt est un lien symbolique vers /sbin/reboot; ce n'est pas vrai avec systemd. Il n'y a pas de reboot séparé programme du tout.
  • Ignorer les instructions qui halt ou reboot invoquer un shutdown programme avec des arguments de ligne de commande ; ils ne sont pas non plus vrais avec systemd. Il n'y a pas d'shutdown séparé programme du tout.

Chaque ensemble d'outils de gestion de système a sa version de ces utilitaires. systemd, parvenu, nosh, van Smoorenburg init , et BSD init tous ont leur propre shutdown , poweroff , et ainsi de suite. Sur chacun leurs mécaniques sont légèrement différentes. Il en va de même pour leurs pages de manuel.

Dans le jeu d'outils systemd halt ,poweroff ,reboot , telinit , et shutdown sont tous liens symboliques vers /bin/systemctl . Ils sont tous shims de rétrocompatibilité, qui sont simplement des raccourcis pour invoquer l'interface de ligne de commande principale de systemd :systemctl halt . Ils correspondent tous (et sont en fait) au même simple programme. (Par convention, le shell lui indique par quel nom il a été invoqué.)

des cibles, pas des niveaux d'exécution

La plupart de ces commandes sont des raccourcis pour indiquer systemd, en utilisant systemctl halt , pour isoler une cible particulière . L'isolement est expliqué dans le systemctl halt page de manuel (qv), mais peut être, aux fins de cette réponse, considérée comme le démarrage d'une cible et l'arrêt de toutes les autres. Les cibles standard utilisées dans systemd sont listées sur le systemd.special (8) page de manuel.

Les diagrammes sur le bootup (7) la page de manuel de l'ensemble d'outils systemd, en particulier la dernière, montre qu'il y a trois cibles "finales" qui sont pertinentes ici :

  • halt.target — Une fois que le système aura atteint l'état d'isolement complet de cette cible, il aura appelé le reboot(RB_HALT_SYSTEM) appel système. Le noyau aura tenté d'entrer dans un programme de surveillance de ROM, ou simplement arrêté le processeur (en utilisant le mécanisme approprié pour le faire).
  • reboot.target — Une fois que le système aura atteint l'état d'isolement complet de cette cible, il aura appelé le reboot(RB_AUTOBOOT) appel système (ou l'équivalent avec la ligne de commande magique). Le noyau aura tenté de déclencher un redémarrage.
  • poweroff.target — Une fois que le système aura atteint l'état d'isolement complet de cette cible, il aura appelé le reboot(RB_POWER_OFF) appel système. Le noyau aura tenté de couper l'alimentation du système, si possible.
Connexe :Comment exécuter une commande qui implique une redirection ou une canalisation avec sudo ?

Ces sont les choses auxquelles vous devriez penser lorsque le système final l'indique, pas les niveaux d'exécution. Remarquez à partir du diagramme que le système cible systemd lui-même encode des choses qui sont, dans d'autres systèmes, implicites plutôt qu'explicites :comme la notion que chacune de ces cibles finales englobe le shutdown.target cible, afin que l'on décrive les services qui doivent être arrêtés avant l'arrêt en les mettant en conflit avec le shutdown.target cible.

systemctl halt essaie d'envoyer des requêtes à systemd-logind lorsque l'utilisateur appelant n'est pas le superutilisateur. Il transmet également les arrêts différés à systemd-shutdownd . Et certains raccourcis déclenchent wall notifications. Ces complexités mises à part, ce qui rendrait cette réponse plusieurs fois plus longue, en supposant que vous êtes actuellement le superutilisateur et que vous ne demandez pas d'action planifiée :

  • systemctl isolate halt.target a les raccourcis :
    • shutdown -H now
    • systemctl halt
    • halt simple sans fioritures
  • systemctl isolate reboot.target a les raccourcis :
    • shutdown -r now
    • telinit 6
    • systemctl reboot
    • reboot sans fioritures
  • systemctl isolate poweroff.target a les raccourcis :
    • shutdown -P now
    • telinit 0
    • shutdown now
    • systemctl poweroff
    • poweroff simple sans fioritures
  • systemctl isolate rescue.target a les raccourcis :
    • telinit 1
    • systemctl rescue
  • systemctl isolate multi-user.target a les raccourcis :
    • telinit 2
    • telinit 3
    • telinit 4
  • systemctl isolate graphical.target a le raccourci :
    • telinit 5

Après avoir analysé les différentes syntaxes de ligne de commande, celles-ci se retrouvent toutes dans les mêmes chemins de code à l'intérieur du systemctl halt programme.

Remarques :

  • Le comportement traditionnel de l'shutdown now sans option a été de passer en mode mono-utilisateur . Ce n'est pas le cas avec systemd. rescue.target — le mode mono-utilisateur est renommé mode de secours dans systemd - n'est pas accessible avec le shutdown commande.
  • telinit fait vraiment ignorer complètement tous ces runlevelN.target et default.target liens symboliques dans le système de fichiers que les pages de manuel décrivent. Les mappages ci-dessus sont câblés dans le systemctl halt programme, dans un tableau.
  • systemd n'a aucune notion de niveau d'exécution actuel . Le fonctionnement de ces commandes n'est pas conditionné par "si vous êtes au niveau d'exécution N ".
  • Le --force l'option halt , reboot , et poweroff commandes revient à dire --force --force à l'arrêt systemctl halt , systemctl reboot , et systemctl poweroff commandes. Cela rend systemctl halt essayez d'appeler reboot() directement. Normalement, il essaie simplement d'isoler les cibles.
  • telinit n'est pas identique à init . Ce sont des programmes différents dans le monde systemd, ce dernier étant un autre nom pour le systemd programme, pas pour le systemctl halt programme. Le systemd le programme n'est pas nécessairement compilé avec une compatibilité van Smoorenburg, et sur certains systèmes d'exploitation systemd se plaint d'être appelé de manière incorrecte si l'on tente init N .

Autres lectures

  • Existe-t-il de bonnes raisons d'arrêter le système sans couper l'alimentation ?
  • Pourquoi `init 0` entraîne-t-il des "arguments excessifs" lors de l'installation d'Arch ?
  • Stephen Wadeley (2014). "8. Gestion des services avec systemd" Guide de l'administrateur système Red Hat Enterprise Linux 7 . Chapeau rouge.
  • Lennart Poettering (2013-10-07). systemctl halt . pages de manuel systemd. freedesktop.org.
  • Lennart Poettering (2013-10-07). systemd.special . pages de manuel systemd. freedesktop.org.
  • Lennart Poettering (2013-10-07). bootup . pages de manuel systemd. freedesktop.org.
  • Jonathan de Boyne Pollard (2018). init . Guide bouffe . Logiciels.

Linux
  1. Apprenez la différence entre les commandes "su" et "su -" sous Linux

  2. 3 commandes Linux pour arrêter le système et vous pourrez le faire facilement

  3. 3 commandes Linux utiles pour les administrateurs système

  4. Quelle est la différence entre un utilisateur normal et un utilisateur système ?

  5. Linux - Comment définir l'affinité CPU par défaut pour tous les démons dans Systemd ?

Choisissez le meilleur système de fichiers pour votre Linux

Les 40 commandes de serveur Linux utiles pour les débutants et les professionnels

Les 50 commandes FTP Linux couramment utilisées pour les débutants

Serveur de surveillance Graylog sur Ubuntu Linux pour la surveillance du serveur/des services

Les 15 meilleurs émulateurs Linux pour système Windows

Les 20 meilleurs outils bioinformatiques pour le système Linux