944 063 154

¿Cómo programar tareas en Cron y Crontab?

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.

¿Qué es Cron?

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.

¿Qué es Crontab?

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.

¿Cómo crear una tarea en 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:

  1. m, el minuto. De 0 a 59.
  2. h, la hora. De 0 a 23.
  3. dom, el día del mes. De 1 a 31.
  4. mon, el mes. De 1 a 12.
  5. dow, el día de la semana. De 1 a 6 para indicar un día entre el lunes y el sábado. Para los domingos puedes utilizar el 0 o el 7.

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:

  • @reboot, ejecuta el script cuando se inicia el equipo.
  • @yearly, ejecuta el script una vez al año. Generalmente el 1 de enero a las 00.00 (0 0 1 1 * *)
  • @monthly, ejecuta el script el primer día de cada mes a las 00.00 (0 0 1 * *)
  • @weekly, ejecuta el script todos los domingos a las 00.00 (0 0 * * 0)
  • @daily, ejecuta el script todos los días a las 00.00 (0 0 * * *)
  • @midnight, ejecuta el script a todas las noches a las 00.00, al igual que daily.
  • @hourly, ejecuta el script en el primer minuto de cada hora (0 * * * *).

Comandos básicos para configurar un cron

Para poder configurar una tarea cron manualmente hay que acceder a través de SSH. Después, podremos indicar el comando que necesitemos:

  • Crontab archivo, para reemplazar el archivo crontab por uno nuevo.
  • Contab –e, para editar el archivo crontab de un usuario. Cada una de las líneas será una tarea cron diferente.
  • Crontab –l, para obtener un listado de todas las tareas del archivo crontab.
  • Crontab –r, para borrar el archivo crontab. Antes de ejecutar este comando asegúrate de que realmente quieres eliminar este archivo, ya que después no podrás volver a recuperar el archivo.
  • Crontab –c dir, para indicar dónde se almacenará el archivo crontab. Recuerda que es necesario contar con permisos de ejecución para poder enviar este comando.
  • Crontab –u usuario, para gestionar el crontab de otros usuarios del sistema.

Artículos relacionados