Lectura "¿Cuál es la diferencia entre los comandos Halt y Shutdown?" , Generalmente tengo una idea de lo que hace el comando shutdown, con o sin las opciones -h / -r.
El comando "detener" realiza el apagado del sistema para ejecutar el nivel 0 del sistema.
El comando "shutdown" apaga el sistema para ejecutar el nivel 1 sin el comando -h o -r.
¿Qué pasa con el comando "poweroff" que entra en el nivel de ejecución 0 o 1? ¿Es esta la única diferencia principal entre estos tres comandos?
Respuestas:
Y ahora, la respuesta del sistema.
Está utilizando, según la etiqueta de su pregunta, Red Hat Enterprise Linux. Desde la versión 7, que ha usado systemd. Ninguna de las otras respuestas son correctas para el mundo de systemd; ni siquiera son algunos de los supuestos en su pregunta.
halt
comando de las utilidades "System 5" de Van Smoorenburginit
./sbin/halt
es un enlace simbólico a/sbin/reboot
; Eso no es cierto con systemd. No hay ningúnreboot
programa separado en absoluto.halt
oreboot
invocar unshutdown
programa con argumentos de línea de comandos; tampoco son ciertas con systemd. No hay ningúnshutdown
programa separado en absoluto.Cada conjunto de herramientas de administración del sistema tiene su versión de estas utilidades. systemd, advenedizo, nosh , van Smoorenburg
init
, BSD yinit
todos tienen su propiahalt
,poweroff
y así sucesivamente. En cada uno sus mecanismos son ligeramente diferentes. Así son sus páginas de manual.En el conjunto de herramientas systemd
halt
,poweroff
,reboot
,telinit
, yshutdown
son todos los enlaces simbólicos a/bin/systemctl
. Son todas las cuñas compatibilidad hacia atrás, 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 programa único . (Por convención, el shell le dice con qué nombre ha sido invocado).objetivos, no niveles de ejecución
La mayoría de esos comandos son shorthands para decirle a systemd, usar
systemctl
, para aislar un objetivo particular . El aislamiento se explica en lasystemctl
página del manual (qv), pero se puede considerar, a los efectos de esta respuesta, como iniciar un objetivo y detener cualquier otro. Los objetivos estándar utilizados en systemd se enumeran en lasystemd.special
(8) página del manual.Los diagramas en la
bootup
página del manual (7) en el conjunto de herramientas systemd, en particular el último, muestran que hay tres objetivos "finales" que son relevantes aquí:halt.target
- Una vez que el sistema ha alcanzado el estado de aislar completamente este objetivo, habrá llamado la llamada alreboot(RB_HALT_SYSTEM)
sistema. El kernel habrá intentado ingresar a un programa de monitor ROM, o simplemente detuvo la CPU (utilizando cualquier mecanismo apropiado para hacerlo).reboot.target
- Una vez que el sistema ha alcanzado el estado de aislar completamente este objetivo, habrá llamado la llamada alreboot(RB_AUTOBOOT)
sistema (o el equivalente con la línea de comando mágico). El núcleo habrá intentado activar un reinicio.poweroff.target
- Una vez que el sistema ha alcanzado el estado de aislar completamente este objetivo, habrá llamado la llamada alreboot(RB_POWER_OFF)
sistema. El núcleo habrá intentado eliminar la energía del sistema, si es posible.Estas son las cosas en las que debería estar pensando en los estados finales del sistema, no en los niveles de ejecución. Observe en el diagrama que el sistema de destino systemd mismo 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 describe los servicios que deben detenerse antes del apagado por hacer que entren en conflicto con elshutdown.target
objetivo.systemctl
intenta enviar solicitudes asystemd-logind
cuando el usuario que llama no es el superusuario. También pasa a los retrasos en los cierressystemd-shutdownd
. Y algunas manos cortas activanwall
notificaciones. Dejando a un lado esas complejidades, lo que haría que esta respuesta fuera varias veces más larga, suponiendo que usted es actualmente el superusuario y no solicita una acción programada:systemctl isolate halt.target
tiene las manos cortas:shutdown -H now
systemctl halt
halt
systemctl isolate reboot.target
tiene las manos cortas:shutdown -r now
telinit 6
systemctl reboot
reboot
systemctl isolate poweroff.target
tiene las manos cortas:shutdown -P now
telinit 0
shutdown now
systemctl poweroff
poweroff
systemctl isolate rescue.target
tiene las manos cortas:telinit 1
systemctl rescue
systemctl isolate multi-user.target
tiene las manos cortas:telinit 2
telinit 3
telinit 4
systemctl isolate graphical.target
tiene la taquigrafía:telinit 5
Después de analizar las diferentes sintaxis de línea de comandos, todas estas terminan en las mismas rutas de código dentro del
systemctl
programa.Notas:
shutdown now
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 elshutdown
comando.telinit
realmente ignora por completo todos esos y enlaces simbólicos en el sistema de archivos que describen las páginas del manual. Las asignaciones anteriores están cableadas al programa, en una tabla.runlevelN.target
default.target
systemctl
--force
opción de lahalt
,reboot
ypoweroff
comandos es lo mismo que decir--force --force
a lossystemctl halt
,systemctl reboot
ysystemctl poweroff
los comandos. Esto hace quesystemctl
intente llamarreboot()
directamente. Normalmente solo trata de aislar objetivos.telinit
No es lo mismo queinit
. Son programas diferentes en el mundo systemd, siendo este último otro nombre para elsystemd
programa, no para elsystemctl
programa. Elsystemd
programa no está necesariamente compilado con ninguna compatibilidad de Van Smoorenburg, y en algunos sistemas operativos systemd se queja de ser invocado incorrectamente si se intenta .init N
Otras lecturas
systemctl
. páginas de manual de systemd. freedesktop.org.systemd.special
. páginas de manual de systemd. freedesktop.org.bootup
. páginas de manual de systemd. freedesktop.org.init
. nosh Guide . Softwaresfuente
systemctl reboot
debe ser equivalente asystemctl start reboot.target --job-mode=replace-irreversible
. Usar cualquier otro modo de trabajo es menos robusto. unix.stackexchange.com/questions/381739/…systemctl reboot
la forma "segura" de reiniciar, por ejemplo,init 6
cuál es la forma en que de otro modo sería seguro reiniciar?halt
indica al hardware que detenga todas las funciones de la CPU , pero lo deja en estado encendido. Esto generalmente significa que alguien tiene que reiniciar o apagar la máquina manualmente presionando el botón de encendido después. La forma específica de lograr esto es específica de la arquitectura, pero, por ejemplo, el conjunto de instrucciones x86 proporciona lasHLT
instrucciones que detienen la unidad central de procesamiento (CPU) hasta que se dispara la próxima interrupción externa.poweroff
, comohalt
, detiene la CPU pero también envía una señal de hardware ACPI que indicará al sistema que comience con un apagado completo e inmediato. Esto es aproximadamente equivalente a presionar el botón de encendido en una computadora de escritorio típica.Ambos
halt
ypoweroff
generalmente son enlaces simbólicos alreboot
ejecutable, que generalmente invocará lashutdown
herramienta con los argumentos apropiados (-h
,-P
or
) dependiendo de sihalt
,poweroff
oreboot
se usó para invocar la herramienta. Sin embargo, cuando--force
se pasa la opción areboot
, o cuando está en el nivel de ejecución 0 o 6,reboot
invocará lareboot()
llamada del sistema con un código de comando apropiado.fuente
/sbin/init 0
o/sbin/telinit 0
debería ser lo mismo que detener el sistema, aunque los pasos específicos que se tomen dependerían del sistema init en cuestión, como System-V init , upstart o systemd . Si está ejecutando RHEL, estaría utilizando systemd.halt
,poweroff
yshutdown -h
son completamente equivalentes. De hecho, detener y apagar no hacen más que llamarshutdown -h
. Desde la página de manual de alto / apagado:El apagado luego procede a apagar el sistema cambiando al nivel de ejecución 0.
Detener y apagar (y reiniciar) desempeñan un doble papel; cuando se ejecutan en el proceso de apagado (es decir, en el nivel de ejecución 0 o 6), realizan las operaciones de bajo nivel requeridas para detener físicamente, apagar o reiniciar la máquina, como se describe en otra respuesta.
fuente