GNU/Linux >> Tutoriales Linux >  >> Linux

¿La diferencia entre estos comandos para desactivar un servidor Linux?

Leer "¿Cuál es la diferencia entre los comandos Halt y Shutdown?" , generalmente tengo una idea de lo que hace el comando de apagado, con o sin las opciones -h/-r.

El comando "detener" realiza el apagado del sistema al nivel de ejecución 0 del
sistema.

El comando "apagar" realiza un apagado del sistema al nivel de ejecución
1 sin el comando -h o -r.

¿Qué sucede con el comando "apagar" si entra en el nivel de ejecución 0 o 1?
¿Es esta la única diferencia principal entre estos tres comandos?

Respuesta aceptada:

Y ahora, la respuesta systemd.

Está utilizando, según la etiqueta de su pregunta, Red Hat Enterprise Linux. Desde la versión 7, que ha utilizado systemd. Ninguna de las otras respuestas es correcta para el mundo de systemd; ni siquiera lo son algunas de las suposiciones en su pregunta.

  • Olvídate de los niveles de ejecución; existen, pero solo como cuñas de compatibilidad. La documentación de systemd establece que el concepto está "obsoleto". Si está comenzando a aprender estas cosas en un sistema operativo systemd, no comience allí.
  • Olvídate de la página del manual que citó marcelm; no es del conjunto de herramientas adecuado y es una descripción del comando de otro conjunto de herramientas, incorrecto para systemd. Es el de la halt comando desde el van Smoorenburg “Sistema 5” init utilidades.
  • Ignore las declaraciones que /sbin/halt es un enlace simbólico a /sbin/reboot; eso no es cierto con systemd. No hay un reboot separado programa en absoluto.
  • Ignore las declaraciones que halt o reboot invocar un shutdown programa con argumentos de línea de comandos; tampoco son ciertos con systemd. No hay un shutdown separado programa en absoluto.

Cada conjunto de herramientas de administración del sistema tiene su versión de estas utilidades. systemd, advenedizo, nosh, van Smoorenburg init y BSD init todos tienen su propio halt , poweroff , Etcétera. En cada uno su mecánica es ligeramente diferente. También lo son sus páginas de manual.

En el conjunto de herramientas systemd halt ,poweroff ,reboot , telinit y poweroff son todos enlaces simbólicos a /bin/systemctl . Son todos correcciones de compatibilidad con versiones anteriores, que son simplemente abreviaturas para invocar la interfaz de línea de comandos principal de systemd:systemctl . Todos se asignan a (y de hecho son) ese mismo único programa. (Por convención, el shell le dice qué nombre lo ha invocado).

objetivos, no niveles de ejecución

La mayoría de esos comandos son abreviaturas para decirle a systemd, usando systemctl , para aislar un objetivo particular . El aislamiento se explica en systemctl página del manual (qv), pero puede ser, para los propósitos de esta respuesta, considerado como iniciar un objetivo y detener cualquier otro. Los objetivos estándar utilizados en systemd se enumeran en systemd.special (8) página del manual.

Los diagramas en el bootup (7) página de manual en el conjunto de herramientas systemd, en particular la última, muestra que hay tres objetivos "finales" que son relevantes aquí:

  • halt.target — Una vez que el sistema haya alcanzado el estado de aislamiento total de este objetivo, habrá llamado al reboot(RB_HALT_SYSTEM) llamada del sistema. El núcleo habrá intentado ingresar a un programa de monitoreo de ROM, o simplemente detuvo la CPU (usando cualquier mecanismo que sea apropiado para hacerlo).
  • reboot.target — Una vez que el sistema haya alcanzado el estado de aislamiento total de este objetivo, habrá llamado al reboot(RB_AUTOBOOT) llamada al sistema (o el equivalente con la línea de comando mágica). El núcleo habrá intentado activar un reinicio.
  • poweroff.target — Una vez que el sistema haya alcanzado el estado de aislamiento total de este objetivo, habrá llamado al reboot(RB_POWER_OFF) llamada del sistema. El núcleo habrá intentado eliminar la energía del sistema, si es posible.
Relacionado:¿Cómo ejecutar un comando que implica redirigir o canalizar con sudo?

Estos son las cosas en las que debe pensar como establece el sistema final, no en los niveles de ejecución. Observe en el diagrama que el propio sistema de destino systemd codifica cosas que, en otros sistemas, son implícitas en lugar de explícitas:como la noción de que cada uno de estos objetivos finales abarca el shutdown.target objetivo, de modo que uno describa los servicios que deben detenerse antes de apagarlos haciendo que entren en conflicto con el poweroff.target objetivo.

systemctl intenta enviar solicitudes a systemd-logind cuando el usuario que llama no es el superusuario. También pasa los apagados retrasados ​​a systemd-shutdownd . Y algunas abreviaturas activan wall notificaciones Dejando a un lado esas complejidades, lo que haría que esta respuesta fuera varias veces más larga, suponiendo que actualmente sea el superusuario y no solicite una acción programada:

  • systemctl isolate halt.target tiene las abreviaturas:
    • shutdown -H now
    • systemctl halt
    • sin adornos halt
  • systemctl isolate reboot.target tiene las abreviaturas:
    • shutdown -r now
    • telinit 6
    • systemctl reboot
    • sin adornos reboot
  • systemctl isolate poweroff.target tiene las abreviaturas:
    • shutdown -P now
    • telinit 0
    • shutdown now
    • systemctl poweroff
    • sin adornos poweroff
  • systemctl isolate rescue.target tiene las abreviaturas:
    • telinit 1
    • systemctl rescue
  • systemctl isolate multi-user.target tiene las abreviaturas:
    • telinit 2
    • telinit 3
    • telinit 4
  • systemctl isolate graphical.target tiene la abreviatura:
    • telinit 5

Después de analizar las diferentes sintaxis de la línea de comandos, finalmente terminan en las mismas rutas de código dentro de systemctl programa.

Notas:

  • El comportamiento tradicional de shutdown now sin opciones ha sido cambiar al modo de usuario único . Este no es el caso con systemd. rescue.target — el modo de usuario único se renombra como modo de rescate en systemd:no se puede acceder con shutdown comando.
  • telinit realmente lo hace ignorar por completo todos esos runlevelN.target y default.target enlaces simbólicos en el sistema de archivos que describen las páginas del manual. Las asignaciones anteriores están integradas en el systemctl programa, en una tabla.
  • systemd no tiene noción de un nivel de ejecución actual . La operación de estos comandos no está condicionada a ningún "si está en el nivel de ejecución N “.
  • La --force opción al halt , reboot y poweroff comandos es lo mismo que decir --force --force al systemctl halt , systemctl reboot y systemctl poweroff comandos Esto hace que systemctl intenta llamar a reboot() directamente. Normalmente solo trata de aislar objetivos.
  • telinit no es lo mismo que init . Son diferentes programas en el mundo systemd, siendo este último otro nombre para el systemd programa, no para el systemctl programa. El systemd El programa no está necesariamente compilado con ninguna compatibilidad de van Smoorenburg, y en algunos sistemas operativos systemd se queja de que se invoca incorrectamente si se intenta init N .

Lecturas adicionales

  • ¿Hay alguna buena razón para detener el sistema sin cortar la energía?
  • ¿Por qué `init 0` da como resultado "Argumentos en exceso" en la instalación de Arch?
  • Stephen Wadeley (2014). “8. Administración de servicios con systemd” Guía del administrador del sistema Red Hat Enterprise Linux 7 . Sombrero rojo.
  • Lennart Poettering (2013-10-07). systemctl . páginas del manual systemd. freedesktop.org.
  • Lennart Poettering (2013-10-07). systemd.special . páginas del manual systemd. freedesktop.org.
  • Lennart Poettering (2013-10-07). bootup . páginas del manual systemd. freedesktop.org.
  • Jonathan de Boyne Pollard (2018). init . Guía de comida . Software.

Linux
  1. Diferencia entre los comandos "su" y "su -" en Linux

  2. ¿Cuál es la diferencia entre un usuario normal y un usuario del sistema?

  3. Centos:¿cuál es la diferencia entre /usr/lib/systemd/system y /etc/systemd/system?

  4. ¿Cuál es la diferencia entre las claves autorizadas y el archivo hosts conocidos para SSH?

  5. ¿Cuál es la diferencia entre una llamada de biblioteca y una llamada de sistema en Linux?

Elija el mejor sistema de archivos para su Linux

Los 40 comandos útiles del servidor Linux para principiantes y profesionales

Los 50 comandos FTP de Linux de uso común para los novatos

Servidor de monitoreo Graylog en Ubuntu Linux para servidores/servicios de monitoreo

Los 15 mejores emuladores de Linux para sistemas Windows

Las 20 mejores herramientas de bioinformática para el sistema Linux