Pantallas informativas (VII): Programado de encendido y actualizaciones con crontab

En las anteriores entradas hemos estado hablando de automatizar y apagar, ahora toca encender la pantalla y ejecutar las tareas a su hora, y eso lo vamos a hacer muy fácil con crontab.

Vamos a definir:

    • Ejecución de comandos y scripts al iniciar.
    • Actualización del calendario a las 6 am.
    • Encendido de la pantalla a las 9 am.
    • Comprobar actualizaciones de ficheros cada 30 minutos.
    • Comprobar IP cada 15 minutos.

Como paso previo, damos a todos los scripts que hemos hecho permisos de ejecución con el comando:

chmod +x nombre_del_script.sh

Y ahora programamos su ejecución con crontab.

Sin extendernos mucho, porque no lo voy a hacer mejor que el peor manual de Linux, para programar con crontab la forma es:

* * * * * nombre_del_script.sh

Y los asteriscos, comenzando por la izquierda, son:

      • minuto
      • hora
      • día de la semana
      • mes
      • día del mes

Así, si a las seis de la mañana queremos que se actualicen los ficheros de fechas, pondremos lo siguiente:

* 6 * * * /home/pi/actualizadia.sh

Fácil, ¿no?

Si queremos que una tarea se ejecute cada 15 minutos en el primer asterisco pondremos */15, que vendría a decir “cada 15”, ya que si ponemos sólo 15 la tarea se ejecutará en el minuto 15 de cada hora, no cada 15 minutos. Así:

*/15 * * * * /home/pi/queip.sh

Y si queremos que algo se ejecute al iniciar la Raspberry pues ponemos @reboot loquesea.

Bien, pues ahora que sabemos qué queremos hacer y cómo, nos ponemos manos a la obra.

Editamos crontab, como pi, con el siguiente comando:

crontab -e

Y la primera vez nos preguntará por nuestro editor de textos favorito, yo me apaño bien con nano, pero para gustos colores, podéis seleccionar el que queráis.

Una vez dentro del fichero veremos un montón de líneas comentadas, pues al final colocamos las nuestras:

@reboot sleep 10 && /home/pi/iniciando.sh > /dev/tty1; /home/pi/actualizadia.sh; /home/pi/actualiza.sh; /home/pi/fecha.sh &
#
* 6 * * * /home/pi/actualizadia.sh &
#
* 9 * * * /home/pi/fecha.sh &
#
*/15 * * * * /home/pi/queip.sh &
#
*/30 * * * * /home/pi/actualiza.sh &

Al iniciar le decimos que espere 10 segundos, para dar un poco de tiempo a que acabe de cargar todo antes de comenzar a ejecutar los scripts.

Primero ejecutará iniciando.sh que es el que se encarga de comprobar la wifi. Podríamos haber hecho eso mismo con el sistema, pero prefiero hacerlo así y ver que tengo conexión y una mínima indicación en pantalla por si en algún momento algo va mal.

Y aquí vemos que la salida se ha enviado a /dev/tty1, la pantalla, porque este script lo está ejecutando crontab, no nosotros, y él no necesita pantalla. Por ello, los scripts que hemos hecho hasta ahora habrá que modificarlos ligeramente teniendo en cuenta esto, que habrá que mandar la salida a /dev/tty1 y que si hay que borrar habrá que cambiar el clear por clear_screen. Luego lo vemos porque en realidad son cuatro cambios.

Siguiendo con la línea del inicio, ejecutamos también el fichero de actualización de fechas y luego el de archivos y por último el fecha.sh que será el que compruebe qué tipo de día es y según eso lance el script principal proyecta.sh. Este último será el que tengamos que modificar más cuidadosamente.

Y el resto de líneas es lo comentado anteriormente según lo definido al inicio.

Por legibilidad hemos dejado una línea en blanco, comentada, entre medio de cada línea de tareas programada, pero es completamente optativo esto.

Modificación del fichero proyecta.sh

Bien, como este script es lanzado por otro que a su vez lo ejecuta crontab, cuando decimos en él “borrar pantalla” tenemos que decir “qué pantalla”, así que dirigiremos el comando a /dev/tty1 en estas líneas:

Fácil. Modificamos las líneas necesarias y hemos dejado comentadas las viejas para mejor comprensión.

En esta entrada no pego el código completo del script porque en la siguiente estarán todos los ficheros empaquetaditos y los cambios como se puede ver son mínimos.

Y esto ya casi está. En la siguiente entrada hacemos un repaso, vemos cómo preparar el sistema para más pantallas, para otros usuarios, clonar tarjetas y listo.


Ficheros tratados en esta entrada

    • proyecta.sh (script principal)
    • crontab

 

Deja un comentario

No está permitida la inserción de ningún dato de carácter personal (mail, tef...). Cualquier comentario que los contenga será editado o eliminado.

Por favor, si dejas un comentario pon cualquier nombre para poderme dirigir a ti pero que no te identifique

19 − once =

El comentario es totalmente privado. No se almacena la IP