Gestión sencilla de cron en Ubuntu / Debian

Es muy común querer automatizar tareas hoy en día. De la misma forma, se pueden dar situaciones en las cuales es necesario la ejecución de un script en un momento especifico de día, de la semana, etc. Cron nos ayuda con esta gestión. 

Tal y como nos indicar el manual, Cron es un demonio que permite la ejecución de comandos y scripts programados. Tras esta definición, vamos a aprender como iniciar o detener el demonio en cuestión. Para iniciar el demonio cron "el cual arranca automáticamente con el sistema" será necesario ejecutar el siguiente comando:

sudo service cron start

De la misma forma, si se desea detener el servicio de cron, se ejecutará el siguiente comando

sudo service cron stop

Se pueden emplear varios métodos distintos para permitir la ejecución de scripts. La forma mas sencilla, radica en ubicar el script en cuestión en cualquiera de las siguientes rutas

/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly

Tal y como se puede apreciar, la carpeta daily ejecutará el contenido de la misma diariamente. La carpeta hourly cada hora, la carpeta monthly cada mes y finalmente la carpeta weekly cada semana.

Nota: Recordar que el script debe tener permisos de ejecución "X" y contener el identificativo de shell scripting, es decir #!   /bin/sh

Otra alternativa que permite un mayor control sobre la ejecución del script, radica en el empleo de crontab. Si queremos que el usuario root ejecute un script o comando en una determinada fecha, en primer lugar será necesario ejecutar el siguiente comando:

sudo crontab -e 

La ejecución del comando anterior, abrirá un editor de texto que nos permitirá definir las tareas pertinentes que se quieren que cron ejecute. 

editor de crontab

Para ejecutar un script o comando, en primer lugar deberemos definir cuando se ejecutará el script o comando en formato cron. El formato de la fecha de tipo cron es del siguiente tipo:

"Minuto" "Hora" "Día del mes"  "Mes" "Día de la semana" 

Minuto

Valor entre 0 y 59 y se emplea para indicar el minuto en el que se quiere ejecutar el comando o script.

Hora

Valor entre 0 y 23 que se emplea para indicar la hora en la que se quiere ejecutar el comando o script.

Día del mes

Valor entre 1 y 31 que indica en que día del mes se quiere ejecutar el comando o script

Mes

Valor entre 1 y 12 que se emplea para indicar el mes que se quiere ejecutar el script

Día de la semana

Valor entre 0 y 7 que se emplea para indicar el día de la semana en el que se desea ejecutar el comando o script. Tanto el 0 como el 7 se considera domingo.

Nota: Si se emplea un * indicará todas las posibilidades para un determinado campo. Por ejemplo, si el * se coloca en la posición de la hora, indicará que el comando se ejecutará todas las horas del día.

A continuación se describen algunos ejemplos que pueden ser de utilidad:

30 * * * * => Se ejecutará en el minuto 30 de todas las horas de todos los días

30 8 * * * => Se ejecutará a las 8:30 de todos los días

* 3 * * 7 => Se ejecutará todos los minutos de las 3 del domingo. Es decir de 3:00 a 3:59

7 * 13 2 * => Se ejecutará en el minuto 7 de todas las horas del día 13 de Febrero.

30 8 * 1-2 * => Se ejecutará a las 8:30 de todos los días de Enero y Febrero "Véase el uso del - para emplear listas"

30-40-50 * * * * => Se ejecutará en el minuto 30, 40 y 50 de todas las horas.

*/15 * * * * => Se ejecutará cada 15 minutos de todas las horas de todos los días.

2/2 2/4 * * * => Cada 2 minutos empezando el segundo minuto cada cuatro horas empezando a las 2 de todos los días. 

Una vez que se tiene claro la fecha, se deberá de especificar la ruta al script o el comando en cuestión. Un ejemplo sencillo sería el siguiente:

0 5 * * 1 tar -zcf /var/backups/home.tgz /home/

Está acción realizaría un backup de todas las cuentas de usuario a las 5 de la mañana de todas las semanas.

Finalmente, para que los cambios surjan efecto, será necesario reiniciar cron ejecutando el siguiente comando:

sudo service cron restart