Contents

Encendiendo ordenadores automáticamente con Wake-on-LAN y Cron

Se que es probable que suene a tontería, o lo mismo muchos de vosotros os sintáis identificados conmigo, pero cuando llego a casa después de mis correspondientes 8 horas delante de un ordenador encuentro de lo más satisfactorio soltar la mochila en el primer sitio que encuentro y desplomarme en el sofá o en la silla de escritorio y que toda mi tecnología esté funcionando al instante para aumentar aún más las horas diarias en frente de un ordenador.

Como esto es así, y además suelo conectarme a casa desde los lugares más insospechados, habitualmente tanto mi HTPC como mi ordenador de escritorio están encendidos 24/7, con su consiguiente y absurdo** gasto energético**.

/wp-content/uploads/2013/05/terminal-e1369650464177.png
terminal

Así que esta sublime tontería me sirve como excusa para tocar un poco Cron, que hacía días que quería ver como funcionaba, y añadir una función más a mi Raspberry Pi.

Después de contaros mi vida vamos al lío.

Requisitos

  • Disponer de un ordenador siempre encendido con GNU/Linux en nuestra red local que generará los paquetes programados (en el ejemplo usaremos una Raspberry Pi  con Raspbian instalado).
  • Que los ordenadores objetivo dispongan de la opción de encendido vía wake-on-LAN y habilitar dicha opción en la BIOS de estos dispositivos.

Generar paquetes wake-on-LAN

Para generar paquetes wake-on-LAN deberemos instalar un script con el mismo nombre, que se encargará de ello. Para Debian y derivadas:

1
$ sudo apt-get install wakeonlan

El uso de este script en su modo por defecto es tremendamente sencillo, tan solo deberemos pasarle la dirección MAC del dispositivo que queremos encender vía LAN y éste mandará un “paquete mágico” vía broadcast que será recibido por la máquina objetivo y procederá a encenderse. Su uso más sencillo sería:

1
$ wakeonlan 00:11:22:33:44:55

Que encendería el ordenador con dicha MAC. Wakeonlan dispone de otras funcionalidades como la de especificar una subred o IP concreta para el paquete (-i), especificar el puerto de destino (-p) o leer las direcciones MAC desde un dispositivo (-f). Para nuestro cometido valdrá con su opción más básica.

Programar el envío de paquetes con wake-on-LAN y Cron

Ahora que disponemos de la capacidad de generar paquetes wake-on-LAN programaremos nuestro servidor para que estos se generen cada día laborable unos minutos antes de llegar a casa después del trabajo.

Esto lo conseguimos mediante Cron, un programa que permite la programación de acciones en un periodo de tiempo determinado. Cada minuto Cron lee sus acciones programadas buscando alguna que coincida con ese periodo de tiempo, si la encuentra la ejecuta. Hay varias maneras de generar estas programaciones, para nuestro cometido nos valdremos de las crontabs.

Para editar el crontab del usuario logeado actualmente (esto es importante, puesto que todo lo que ejecute Cron lo hará con sus credenciales) ejecutaremos:

1
$ crontab -e

Se nos abrirá el editor de texto donde podremos leer una serie de indicaciones así como un ejemplo de uso del programa. Añadiremos la siguiente línea:

1
30 18 * * 1-4 wakeonlan 00:11:22:33:44:55 AA:BB:CC:DD:EE:FF > /dev/null

Pasamos a detallar los campos:

  • 30: Minuto en el que ejecutaremos la acción.
  • 18: Hora a la que ejecutaremos la acción.
  • : Día del mes en que ejecutaremos la acción. Usamos el comodín “” para indicar que cualquier día.
  • *: Mes en el que ejecutaremos la acción.
  • 1-4: Día de la semana en que ejecutaremos la acción, donde 1 es lunes y 7 es domingo, así que estamos especificando que se ejecute de lunes a jueves.
  • “wakeonlan…”: El comando a ejecutar.
  • > /dev/null: Descartamos la salida del programa ya que de no hacerlo Cron nos enviaría un correo con la salida del comando cada vez que este se ejecutara.

Por lo tanto con esta línea enviaremos el paquete wake-on-LAN cualquier día de cualquier mes y de cualquier año a las 18:30 siempre y cuando sea entre lunes y jueves.

He limitado la ejecución hasta el jueves porque el viernes salgo antes, así que añadiré esta otra línea al archivo:

1
15 16 * * 5 wakeonlan 00:11:22:33:44:55 AA:BB:CC:DD:EE:FF > /dev/null

Cerramos el editor guardando los cambios y nos aparecerá:

1
crontab: installing new crontab

Resultado del invento

Ahora cada día cuando llego a casa tanto mi ordenador de sobremesa como mi HTPC están encendidos y deseosos de satisfacer mi voluntad sin necesitar tener ambos abiertos 24/7 con el consiguiente ahorro energético, puesto que lo que consume la Raspberry Pi roza lo ridículo.

Además, si por cualquier motivo necesito conectarme a alguno de los ordenadores “entre horas” es tan fácil como conectarme vía SSH a la Raspberry y hacerlo manualmente.