En los sistemas operativos de la familia Unix, el comando shutdown se encarga de apagar el sistema de forma segura. Todos los usuarios logueados son notificados y se deshabilita el login. Es posible apagar el sistema inmediatamente o luego de cierto período de tiempo. Todos los procesos son notificados a través de una señal SIGTERM, lo cual da tiempo a aplicaciones como vi o cualquier editor a cerrar y guardar los cambios sobre el archivo siendo editado. También da la posibilidad a todos los servicios a detenerse de forma limpia.

Este artículo explica cómo apagar y reiniciar un sistema de forma segura o de forzada desde línea de comandos en Linux.



En los sistemas operativos con SystemV como gestor de inicio, shutdown es provisto por el paquete sysvinit-core. Funciona enviando una señal al proceso init para cambiar el runlevel. El runlevel 0 es el utilizado para apagar el sistema, mientras que el 6 para reiniciar. El runlevel 1, conocido como single user mode se utiliza para poner al sistema en un estado que permita realizar tareas administrativas.

Por lo tanto, un método grosero para apagar o reiniciar el sistema sin previo aviso es cambiar al runlevel 0 o 6 respectivamente:

# init 0
# init 6

Sin embargo, lo correcto es ejecutar shutdown para notificar a todos los usuarios del sistema. Si se desea apagar el sistema, se debe utilizar la opción -h (halt). En cambio, para reiniciar utilizar -r (reboot). Este utilitario requiere un parámetro de tiempo que consiste en la hora de apagado. Si se desea apagar inmediatamente es posible utilizar el valor "now". Sino es posible utilizar cualquier hora en el formato "hh:mm" o "+mm" (cuántos minutos esperar).

Por ejemplo, para reiniciar el sistema inmediatamente, ejecutar:

# shutdown -r now

Otro ejemplo, para apagar el sistema a las 23:59, ejecutar:

# shutdown -h 23:59

Una característica interesante de shutdown, es que permite cancelar un apagado que está esperando mediante la opción -c. Por ejemplo, si se ha programado un apagado a las 12:35, es posible cancelarlo en cualquier momento ejecutando shutdown -c:

Las distribuciones GNU/Linux con SystemV suelen contar con una entrada en el archivo /etc/inittab que permite reiniciar el sistema con la combinación de teclas Ctrl+Alt+Del a cualquier persona con acceso físico al teclado:

root@hal9000:~# grep ctrlaltdel /etc/inittab 
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

Por otro lado existe el utilitario halt, que se encarga de indicarle al kernel Linux que se va a apagar o reiniciar el sistema. Sin embargo, cuando el sistema corre en modo normal (runlevels 2 al 5), se invoca a shutdown para apagar al sistema de forma segura:

# halt -p

Si se desea reiniciar, quitar la opción -p:

# halt

Sin embargo es posible apagar o reiniciar de forma forzada desde los runlevels 2 al 5, sin invocar a shutdown. Para ello sebe recurrir a la opción -f:

# halt -f

halt a su vez tiene dos enlaces simbólicos para apagar o reiniciar y son poweroff y reboot respectivamente:

root@hal9000:~# file $(which reboot)
/sbin/reboot: symbolic link to halt
root@hal9000:~# file $(which poweroff)
/sbin/poweroff: symbolic link to halt
root@hal9000:~# file $(which halt)
/sbin/halt: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=b9e2fa19f8c9c929408bed7d5f6c27b77798126c, stripped

El enlace simbólico reboot hace que halt reinicie el sistema, mientras que poweroff hace que halt apague.

# reboot
# poweroff

En los sistemas Devuan o (Debian y derivados sin systemd), todos estos utilitarios (init, runlevel, halt, poweroff, reboot, shutdown) son provistos por el paquete sysvinit-core.

En sistemas con systemd como gestor de inicio son enlaces simbólicos a systemctl:

root@debian10:~# file $(which reboot)
/usr/sbin/reboot: symbolic link to /bin/systemctl
root@debian10:~# file $(which poweroff)
/usr/sbin/poweroff: symbolic link to /bin/systemctl
root@debian10:~# file $(which halt)
/usr/sbin/halt: symbolic link to /bin/systemctl
root@debian10:~# file $(which shutdown)
/usr/sbin/shutdown: symbolic link to /bin/systemctl

Estos enlaces funcionan como systemctl reboot, systemctl poweroff, systemctl halt, etc.

Para más información, consultar las siguientes páginas de manual:

man init
man runlevel
man halt
man shutdown
man systemctl


Tal vez pueda interesarte


Compartí este artículo