En ocasiones es posible que necesitemos programar tareas para que se ejecuten en un tiempo determinado: cada hora, cada día, cada semana... Esto podemos hacerlo a través de Cron o Crontab, los encargados de llevar a cabo la programación de las tareas en Linux. Aunque puedan parecer lo mismo, en realidad se trata de dos elementos diferentes que dependen entre sí para programar las tareas.
Cron es un proceso de Linux que se ejecuta en segundo plano nada más arrancar el sistema. Su función es comprobar si existe alguna tarea (job) que ejecutar en la hora configurada en el sistema. Puede variar según la distribución que utilices, pero lo habitual es que Cron se inicie en las carpetas /etc/rc.d/ o /etc/init.d y que cada minuto realice una comprobación en los ficheros /etc/crontab o /var/spool/cron para buscar las ejecuciones.
Para que el Cron pueda ejecutarse en el momento adecuado, es fundamental que la zona horaria del sistema esté correctamente configurada. De otra forma, se ejecutará en otro momento y puede ocasionar ciertos problemas.
Crontab no es más que un archivo de texto que contiene un listado de todos los scripts a ejecutar y cuándo tiene que realizarse esta tarea. Cada usuario del sistema tendrá su propio archivo Crontab ubicado en la carpeta etc y propiedad del usuario root. Para generar este archivo el usuario es necesario ejecutar el comando crontab.
Para crear una tarea en crontab hay que configurar el siguiente script que denominaremos consulta.sh:
!/bin/bash
#script de ejemplo
sudo ls -l / > archivoResultado
Una vez creado el script, es necesario cambiar los premisos. Este paso es fundamental para que el comando pueda ejecutarse.
chmod ugo+x consulta.sh
A continuación, tendremos que editar el fichero que contiene las tareas mediante el comando crontab –e. Este comando está compuesto por 5 asteriscos y el comando que tiene que ejecutarse. Cada uno de los asteriscos indica la siguiente información sobre la ejecución del comando:
Estos valores pueden sustituirse por un asterisco si queremos que se ejecute cada minuto, cada hora, cada día…
Por ejemplo, si queremos que el script se ejecute todos los lunes a las 8 de la mañana deberemos hacer lo siguiente:
00 08 * * 1 usuario /ubicación/del/script/consulta.sh
Además, Linux cuenta con algunas cadenas de texto preconfiguradas que te ayudarán a programar scripts en periodos determinados:
Para poder configurar una tarea cron manualmente hay que acceder a través de SSH. Después, podremos indicar el comando que necesitemos: