Programar Encendido Y Apagado En Linux

En este artículo, vamos a ver como podemos programar el encendido y apagado de nuestro sistema Linux de manera sencilla y automática.

Esto es algo que podríamos realizar desde la BIOS, ya que por lo general y sobre todo las BIOS más recientes, nos permiten programar el encendido del equipo ajustándolo a nuestras necesidades, pero en este caso, prefiero no utilizar la BIOS y gestionarlo todo desde el sistema operativo, ya que me parece más cómodo.

Para ello, vamos a combinar dos funcionalidades: Real time clock alarm y Cron.

Programar Encendido y Apagado en Linux

Antes de ver los pasos necesarios, vamos a explicar el funcionamiento del sistema de encendido/apagado.

Por un lado, tendremos un script bash que se ejecutará a raíz de una tarea de cron. El script se encargará de programar la hora de encendido del sistema y también lo apagará al finalizar su ejecución. La ejecucción del script se gestionará desde la tarea cron que definiremos.

Primero de todo, vamos a ver el contenido del script, al que he llamado programar_encendido_apagado.sh:

#!/bin/bash

sh -c "echo 0 > /sys/class/rtc/rtc0/wakealarm"

# System will turn on in 15 hours
sh -c "echo `date '+%s' -d '+ 15 hours'` > /sys/class/rtc/rtc0/wakealarm"

# System will shut down when this script is executed
shutdown -h now

La primera línea del script resetea cualquier alarma que tengamos preestablecida con anterioridad. En la segunda línea estamos indicando la hora de encendido del sistema, que en este caso será 15 horas más tarde desde la ejecución del script. Y con la tercera línea apagaremos el sistema.

Si en vez de horas, nos interesa que el sistema se encienda en x minutos, podemos utilizar esta línea de aquí (la sustituiríamos por la segunda línea). El funcionamiento es el mismo que la línea anterior, pero en este caso, con minutos.

# System will turn on in 15 minutes
sh -c "echo `date '+%s' -d '+ 15 minutes'` > /sys/class/rtc/rtc0/wakealarm"

Y lo mismo ocurre con la hora de apagado, también podemos establecer la hora a la que se apagaría el sistema si así lo deseamos.

# System will shut down at 06:00
shutdown -h 06:00

En mi caso, prefiero que el sistema se apague con la ejecución del script, ya que así, definiré la hora de apagado directamente en la tarea de Cron, que es el siguiente paso que vamos a ver.

Hay que saber que podemos definir diferentes tareas de cron por usuario en el sistema, por esto mismo, es necesario utilizar sudo, para así editar el cron del usuario root, ya que necesitamos de sus permisos para llevar a cabo las acciones del script.

Para definir una tarea en cron (con el usuario root), lo haremos con el siguiente comando:

sudo crontab -e

Añadiremos esta línea, que establece que todos los días a las 17:00, se ejecute nuestro script.

# m h  dom mon dow   command
# To turn on and off automatically
17 00 * * * /home/{usuario}/programar_encendido_apagado.sh

Simplemente con esto, ya sabemos que todos los días a las 17:00 se ejecutará nuestro script programar_encendido_apagado.sh, y como consecuencia, se creará una alarma real time clock alarm para encender nuestro sistema dentro de 15 horas, es decir, a las 08:00, y lo apagará en este momento, teniendo como resultado una programación de encendido/apagado de todos los días de 08:00 a 17:00.