Apagar automáticamente Ubuntu, a una hora, si no lo estás usando

Publicado por P. Ruiz en

En ciertas ocasiones, puede resultar muy útil apagar tu ordenador automáticamente cuando llegue una hora concreta. Esto es muy útil cuando no utilizas el ordenador de forma continuada durante tu jornada laboral.

En estos casos, es frecuente que arranques tu ordenador por la mañana y lo tengas funcionando todo el día, hasta el final de la jornada. En ese momento, debes ir hasta el ordenador y apagarlo.

Para evitarlo, puedes seguir las indicaciones incluidas en nuestro artículo Programar una tarea repetitiva en Ubuntu Server 20.04 LTS (Ten en cuenta que, si estás usando la versión de escritorio de Ubuntu, solo necesitarás abrir una ventana de terminal para aplicarlo).

Puedes abrir la ventana de terminal usando la combinación de teclas Alt + Control + T.

Como ejemplo, en ese artículo, creábamos una tarea programada que apagaba el ordenador, todos los días laborales de la semana, de forma automática, a la hora que hayamos establecido. La tarea, puede tener un aspecto como este:

30 18 * * 1-5 /sbin/poweroff

Tarea programada.

apagar-ubuntu-si-no-lo-estas-usando-001

Esta solución, que es muy fácil de implementar, tiene un problema: ¿qué pasa si me retraso y aún sigo trabajando a la hora en que debe apagarse el ordenador?

Como ya has imaginado, la respuesta es que el apagado automático interrumpirá tu trabajo, pudiendo, incluso, hacerte perder información.

Para resolverso, en lugar de apagar directamente el ordenador en la tarea programada, lo haremos desde un script. De esta forma, antes de apagar, podremos realizar algunas comprobaciones.

Por lo tanto, lo primero será cambiar la tarea programada, para que ejecute el script a la hora adecuada…

30 18 * * 1-5 /scripts/apagado_controlado.sh

Nueva versión de la tarea.

apagar-ubuntu-si-no-lo-estas-usando-002

Como ves, he creado un subdirectorio, en el directorio raíz, donde guardar el script. Para lograrlo, puedes usar la siguiente orden:

sudo mkdir /scripts

Creamos el directorio /scripts.

apagar-ubuntu-si-no-lo-estas-usando-003

Lógicamente, necesitaremos privilegios administrativos para crear el subdirectorio en esa ubicación.

A continuación, usaremos un editor de textos, también con privilegios administrativos, para crear el script propiamente dicho. Por ejemplo, nano:

sudo nano /scripts/apagado_controlado.sh

Creamos el script.

apagar-ubuntu-si-no-lo-estas-usando-004

… Y como contenido del archivo, escribimos lo siguiente:

#!/bin/bash

if [ -z "$(who)" ]; then
    /sbin/poweroff
fi

De forma resumida, la idea es utilizar el comando who para obtener la lista de usuarios que se encuentran autenticados (logueados) en el sistema. A continuación, tomamos la salida de who como un texto y usamos el operador -z para averiguar si ese texto es nulo. En caso afirmativo, estaremos listos para apagar el ordenador.

Una vez completado el contenido, usamos la combinación de teclas Control + X para salir del editor, y nos aseguramos de guardar los cambios.

apagar-ubuntu-si-no-lo-estas-usando-005

Si necesitaras prevenir también que algún usuario estuviese usando el ordenador de forma remota, bastaría con hacer la comprobación un poco más extensa.

Por ejemplo, en la siguiente variante nos aseguramos de que ningún usuario está haciendo uso de una sesión de escritorio remoto usando el protocolo RDP:

#!/bin/bash

if [ -z "$(who)" ]; then
    rdp_sessions=$(netstat -tn | grep ":3389 ")
    if [ -z "$rdp_sessions" ]; then
        /sbin/poweroff
    fi
fi

En este caso, usamos el comando netstat con los argumentos t (para mostrar solo los sockets TCP) y n (para mostrar las conexiones TCP activas, ofreciendo las direcciones y los puertos como valores numéricos). A continuación, filtramos la salida de netstat con grep para quedarnos solo con las que hacen referencia al puerto 3389 (usado de forma predeterminada por RDP) y guardamos el resultado en la variable rdp_sessions.

Finalmente, comprobamos si el contenido de la variable es nulo, antes de apagar el ordenador. Si es así, es que tampoco tenemos activa ninguna conexión RDP.

Nueva versión del script,

apagar-ubuntu-si-no-lo-estas-usando-006

Por cierto, si en tu sistema no tienes instalado el paquete net-tools, probablemente no te funcione el código anterior, pero puedes resolverlo con el siguiente comando:

sudo apt install net-tools

Aquí hemos supuesto que estamos usando el protocolo RDP, pero  tú puedes hacer las modificaciones oportunas para contemplar otros escenarios.

Una vez completado el script, salimos del editor guardando los cambios y nos aseguramos de darle permisos de ejecución. Por ejemplo, escribiendo lo siguiente:

sudo chmod +x /scripts/apagado_controlado.sh

Asignamos permisos de ejecución.

apagar-ubuntu-si-no-lo-estas-usando-007

Ahora solo nos quedará salir de la sesión y esperar la hora de apagado para comprobar si sucede la magia…

Espero que nuestra explicación de hoy te haya resultado útil.