To bit or not to bit, ingeniera en desarrollo de software, criadora de mantis, mujer transgénera
Ingeniería de software

¿Qué es y cómo funciona el cron en Linux?

En Linux comúnmente queremos tener tareas programadas, ya sea para generar reportes, para hacer respaldos o simplemente para administrar mejor nuestro servidor, para todo esto podemos programar su ejecución con la herramienta en Linux llamada cron.

¿Qué es el cron?

El cron es un servicio o daemon de Linux que busca realizar la ejecución de tareas programadas en una fecha y hora determinadas, normalmente lo tenemos habilitado y ejecutándose desde instalación.

Como todo servicio, este puede ser apagado o prendido y consultarse su estatus por medio de systemctl, un ejemplo de como consultar el estatus es:

systemctl status crond.service

Cuando hablamos de tareas programadas hablamos de comandos que pueden ser ejecutados desde una terminal, como un shell, el comando de mysqldump, o un programa escrito en Python o PHP.

El cron realiza tareas programadas por usuario, por medio de un archivo crontab para cada uno que contiene, entre otros, una lista de comandos y para cada comando su configuración de tiempo de ejecución.

Cuando hablamos de usuarios, nos referimos a los usuarios creados en nuestro sistema operativo Linux que pueden verse en el archivo /etc/passwd.

La configuración de tiempo en el archivo crontab puede hacerse a nivel de minutos, horas, días, mes, año y día de la semana con diferentes combinaciones posibles.

Configuración de cron

Para poder configurar o consultar nuestro cron es necesario editar el archivo crontab por medio del comando crontab, con el que podemos consultar o editar las tareas programadas de un usuario en un script con reglas básicas de sintaxis.

Existen otras vías para configurar crontab, como por medio de archivos de sistema dentro de /etc/crontab y de hecho en algunas distribuciones Linux es posible editar el archivo crontab del usuario directamente, pero en esta guía no las trataré, ni recomiendo.

Comando crontab

Tenemos diferentes opciones de ejecución del comando para ver, editar o cambiar la gestión del usuario del cron.

  • crontab -l: Despliega el contenido del archivo crontab del usuario registrado.
  • crontab -e: Editar o crear el archivo crontab del usuario registrado.
  • crontab -u <nombre de usuario>: Cambiar la gestión del crontab de otro usuario, si se usa con la opción de -l para desplegar la información del archivo crontab de dicho usuario y si es con la opción -e para editar o crear el archivo crontab de otro usuario. Si deseamos ver o editar el archivo crontab de otro usuario que no es el del usuario registrado, necesitamos permisos de administrador ejecutando con usuario root o por medio del comando sudo.

En el siguiente ejemplo estamos buscando editar el archivo crontab del usuario “usuario”:

[root@host ~]# crontab -e -u usuario

Esta ejecución nos abre un editor de texto en línea de comando, la mayoría de las distribuciones de Linux lo abren por medio de “vi“, el archivo que nos abre es precisamente el archivo crontab del usuario que queremos configurarle las tareas programadas, al guardar el archivo nos cambia el cron del usuario con la nueva configuración.

Archivo crontab

Como hemos venido diciendo, el archivo crontab es aquel que tiene las tareas programadas descritas con el comando a ejecutar y la configuración de tiempo.

Empecemos con un pequeño ejemplo de archivo crontab:

59 23 1 12 * php "/ruta/a/archivo.php"

Este ejemplo ejecutará el archivo.php el primer día del mes de diciembre a las 23 horas con 59 minutos, procedo a explicar que significa la línea campo por campo:

  • 59 este número hace referencia a los minutos en el que queremos que se ejecute el comando, podría ser un número de 0 a 59 o un conjunto de estos pegados con comas o un asterisco.
  • 23 este número hace referencia a las horas en el que quieres que se ejecute el comando, podría ser un número de 0 a 23 o un conjunto de estos pegados con comas o un asterisco.
  • 1 este número hace referencia al día del mes en el que quieres que se ejecute el comando, podría ser un número de 1 a 31 o un conjunto de estos pegados con comas o un asterisco.
  • 12 este número hace referencia al mes en el que quieres que se ejecute el comando, podría ser un número del 1 al 12 o un conjunto de estos pegados con comas o un asterisco.
  • asterisco este dato hace referencia al día de la semana en el que queremos se ejecute el comando, si ponemos un asterisco indica que no vamos a acotar la ejecución del comando por día de la semana, en este dato se puede poner también un número del 0 al 6, donde 1 es el día lunes.
  • php “/ruta/a/archivo.php” sería el comando como si lo ejecutáramos desde terminal.

Otro ejemplo de archivo crontab sería:

10 9,20 * * * mysqldump basededatos > "/ruta/a/archivo/backup.sql"

Que buscaría ejecutar diario a las 9:10am y a las 8:10pm el backup de “basededatos” de mysql, este ejemplo presupondría el uso de mysql_config_editor para preconfigurar las credenciales de acceso creadas para el usuario registrado.

0,30 * * * * php "/ruta/al/archivo.php" > "/ruta/a/archivo/output.txt" 2>&1

Que buscaría ejecutar diario cada 30 minutos el archivo.php y guardar el output y las posibles salidas de error en el archivo output.txt.

Guía de formato de archivo crontab

La configuración del archivo crontab sería como sigue:

Guía formato de archivo crontab

Comentarios finales

En otros sistemas operativos como Windows tenemos el Task Scheduler y en Linux tenemos el cron que nos ayuda a administrar la ejecución de tareas programadas por medio de una simple terminal.

Como siempre si les gusta compartan y si no también.