En este artículo voy a demostrar cómo saber si un sistema GNU/Linux fue reiniciado recientemente.

Generalmente recurrimos a la herramienta uptime a fin de conocer cuántos días lleva iniciado un sistema. Por ejemplo en un servidor Debian 9:

root@debian:~# lsb_release -d
Description:    Debian GNU/Linux 9.7 (stretch)
root@debian:~# uptime
 11:52:18 up 28 days,  1:55,  1 user,  load average: 0,04, 0,07, 0,08

Se observa que lleva 28 días en funcionamiento ininterrumpido. Esto significa que fue iniciado/reiniciado por última vez hace dicha cantidad de días.

¿Pero qué sucede si necesitamos conocer con exactitud la fecha de inicio del sistema? A tal fin es posible recurrir al comando who. La opción -b permite conocer la fecha exacta del último inicio:

root@debian:~# who -b
         system boot  Jan  8 09:56

El sistema fue iniciado el 8 de enero a las 9:56 AM.

Si se desea conocer con exactitud las fechas de todas las veces que fue iniciado un sistema Linux, es preciso recurrir a la herramienta last:

root@debian:~# last reboot -f /var/log/wtmp.1 
reboot   system boot  4.18.0-0.bpo.3-a Tue Jan  8 09:56   still running
reboot   system boot  4.18.0-0.bpo.3-a Mon Jan  7 14:36 - 09:56  (19:19)
reboot   system boot  4.18.0-0.bpo.3-a Mon Jan  7 12:03 - 13:46  (01:43)
reboot   system boot  4.18.0-0.bpo.3-a Mon Jan  7 11:32 - 12:02  (00:29)
reboot   system boot  4.18.0-0.bpo.3-a Mon Jan  7 11:15 - 11:31  (00:16)
reboot   system boot  4.18.0-0.bpo.3-a Mon Jan  7 11:12 - 11:14  (00:01)

wtmp.1 begins Thu Jan  3 10:23:27 2019

last recupera información de la base de datos de login, localizada en el archivo wtmp (/var/log/wtmp). El comando last reboot muestra todas las veces que el sistema fue reiniciado, incluyendo la fecha exacta.

Típicamente el archivo wtmp es rotado por la herramienta logrotate:

root@debian:~# ll /var/log/wtmp*
-rw-rw-r-- 1 root utmp  1920 Feb  5 11:51 /var/log/wtmp
-rw-rw-r-- 1 root utmp 84096 Jan 11 10:09 /var/log/wtmp.1

Con lo cual es necesario pasarlo como parámetro con la opción -f, para no perder fechas de reinicios antiguos.

Si en cambio se necesita saber las fechas de apagado del sistema, ejecutar:

root@debian:~# last -x -f /var/log/wtmp.1 | grep shutdown
shutdown system down  4.18.0-0.bpo.3-a Tue Jan  8 09:56 - 09:56  (00:00)
shutdown system down  4.18.0-0.bpo.3-a Mon Jan  7 13:46 - 14:36  (00:50)
shutdown system down  4.18.0-0.bpo.3-a Mon Jan  7 12:02 - 12:03  (00:00)
shutdown system down  4.18.0-0.bpo.3-a Mon Jan  7 11:31 - 11:32  (00:01)
shutdown system down  4.18.0-0.bpo.3-a Mon Jan  7 11:14 - 11:15  (00:00)
shutdown system down  4.18.0-0.bpo.1-a Mon Jan  7 10:06 - 11:12  (01:06)

Ahora bien, para cada reinicio, a simple vista no es posible saber si se trató de un inicio normal (el sistema estaba previamente apagado) o un reinicio (el sistema estaba iniciado y fue reiniciado, por ejemplo a través del comando reboot o shutdown -r). Cabe destacar que un reinicio consiste en un apagado seguido inmediatamente por un encendido de sistema.

Sin embargo, es posible diferenciar inicios de reinicios si se interpreta correctamente la última columna en la salida de last -x, la cual corresponde con la duración del evento:

root@debian:~# last -x -f /var/log/wtmp.1 | grep "shutdown\|reboot"
reboot   system boot  4.18.0-0.bpo.3-a Tue Jan  8 09:56   still running
shutdown system down  4.18.0-0.bpo.3-a Tue Jan  8 09:56 - 09:56  (00:00)
reboot   system boot  4.18.0-0.bpo.3-a Mon Jan  7 14:36 - 09:56  (19:19)
shutdown system down  4.18.0-0.bpo.3-a Mon Jan  7 13:46 - 14:36  (00:50)
reboot   system boot  4.18.0-0.bpo.3-a Mon Jan  7 12:03 - 13:46  (01:43)
shutdown system down  4.18.0-0.bpo.3-a Mon Jan  7 12:02 - 12:03  (00:00)
reboot   system boot  4.18.0-0.bpo.3-a Mon Jan  7 11:32 - 12:02  (00:29)
shutdown system down  4.18.0-0.bpo.3-a Mon Jan  7 11:31 - 11:32  (00:01)
reboot   system boot  4.18.0-0.bpo.3-a Mon Jan  7 11:15 - 11:31  (00:16)
shutdown system down  4.18.0-0.bpo.3-a Mon Jan  7 11:14 - 11:15  (00:00)
reboot   system boot  4.18.0-0.bpo.3-a Mon Jan  7 11:12 - 11:14  (00:01)
shutdown system down  4.18.0-0.bpo.1-a Mon Jan  7 10:06 - 11:12  (01:06)

Si el valor en la última columna de una entrada "shutdown" es igual a "00:00", la entrada "reboot" inmediata superior fue efectivamente un reinicio. Esto se debe a que el valor entre paréntesis indica la cantidad de tiempo que el sistema permaneció apagado (cuando se trata de una entrada "shutdown"). Para un usuario normal, este valor entre paréntesis en la última columna, indica el tiempo que permaneció activo. En cambio, para los eventos "reboot", sin contar el actualmente corriendo (evento "reboot" en estado "still running"), el valor entre paréntesis corresponde con el uptime de dicha sesión.

Para mayor información, revisar las siguientes referencias.

Referencias

  • man wtmp
  • man who
  • man last


Tal vez pueda interesarte


Compartí este artículo