Cron y Crontabs para Programar Scripts

Grupo Lider en la apropiación, desarrollo, uso y difusión de tecnología, ciencia y cultura libre.

Cron y Crontabs para Programar Scripts

Automatizar los scripts en un sistema operativo GNU linux se puede hacer mediante diferentes técnicas, en este articulo vamos a tratar los scripts, controlados mediante crontabs.

Que es un cron y crontab?

Que es Cron?

Cron es un demonio, cuyo nombre viene del Titan griego “Chronos” que significa tiempo, o eso dicen las teorías conspirativas.

Este demonio se inicia con el inicio del /etc/init.d o /etc/rc.d , dependiendo de la familia de la distribución, después de iniciado y cada minuto revisa los ficheros /etc/cron.d , adicional mente también existen los ficheros /etc/cron.daily , /etc/cron.hourly , /etc/cron.mounthly y /etc/cron.weekly.

Que es Crontab?

Crontab es un simple archivo de texto plano, que guarda una lista de ordenes a ejecutar en un tiempo definido por el usuario, este archivo de texto plano es verificado por el demonio cron, para ejecutar las ordenes guardadas en el tiempo establecido.

Creando el Script

En este articulo crearemos y automatizaremos un script de actualización para una distribución hija de Arch Linux, la estructura del script sera la siguiente.

#!/bin/zsh
rm /var/lib/pacman/db.lck
echo 's' | pacman -Syyu &> /tmp/upgradeDailyLog 

Guardaremos el script en la dirección /etc/scritps, el fichero se llamara upgrade.sh y posterior a eso generaremos el archivo de crontab para ejecutarlo cada vez que el ordenador se encienda

Generando el Crontab

Para generar el crontab, necesitamos privilegios de super usuario, crearemos el archivo con los siguientes comandos

$ cd /etc/cron.d
$ sudo touch upgradeDaily
$ sudo touch upgradeDaily

A continuación editaremos el archivo con nano para lo cual ejecutaremos el siguiente comando

$ sudo nano upgradeDaily

Posteriormente indicaremos con la palabra reservada @reboot, que se ejecutará el script cada ve que se inicie el ordenador; hacemos esto en vez de escribir la sintaxis de los 5 argumentos de un archivo crontab ya que si queremos ejecutar el script en una hora determinada puede que el ordenador no se encuentre encendido en ese momento, y si lo ejecutamos cada cierto tiempo (cada hoja por ejemplo), estaremos ejecutando el script un innecesaria numero de veces.

Ahora la configuración que tenemos ya es funcional, sin embargo nuestro sistema no actualizará. Debido a que nuestro script se ejecuta inmediatamente despues del /etc/init.d, en este punto nuestro sistema no se encuentra en condiciones de actualizar ya que aun no ha terminado de cargar el sistema operativo en si, esto quiere decir que la conexión a Internet no se ha establecido por defecto, por lo tanto si vemos nuestro log de errores que establecimos previamente en el script veremos que el fichero de /tmp/updateDaily.log nos mostrará la información de por que fallo la actualización.

Este inconveniente se resuelve fácilmente, simplemente pondremos el script a dormir al menos un minuto, para poder ejecutar nuestro script de modo que el script quedara de la siguiente forma

#!/bin/zsh
sleep 60
rm /var/lib/pacman/db.lck
echo 's' | pacman -Syyu &> /tmp/upgradeDailyLog 

Esto le dará al script tiempo suficiente para que el sistema operativo pueda conectarse a internet, esto antes de que el script trate de actualizar el sistema; de ser necesario si dispone de un pc que se demore en arrancar solo debe aumentar el tiempo en segundos que esperará el script antes de actualizar su sistema.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *