Qué es la sintaxis Crontab: Crontab en Linux y ejemplos útiles

La automatización es uno de los aspectos clave de cualquier sistema, ya sea un servidor físico o un servidor privado virtual (VPS). Si la automatización se configura correctamente, puedes ahorrar cientos de horas preciosas para el usuario y hacer que el flujo de trabajo general sea mucho más eficiente. Una de las herramientas clave para programar tareas es cron.

En este tutorial, vamos a cubrir la sintaxis Crontab, veremos un resumen de las diferencias entre cron job, cron y crontab, y te mostraremos algunos casos de uso útiles cron jobs para un sistema operativo basado en Linux.

¿Qué es Crontab y Cron Job?

En cuanto a los cron jobs, cabe destacar tres términos:

Cron daemon (crond) o simplemente cron es un ejecutable que permite a los usuarios realizar tareas y ejecutarlas automáticamente a una hora determinada.

Cron job es cualquier tarea que un usuario programe utilizando cron.

La tabla cron o Crontab es un archivo que contiene todas las programaciones de las tareas cron que un usuario desea ejecutar regularmente. Los comandos se escriben uno por línea y ordenan al cron daemon que ejecute una tarea a una hora determinada.

Formato y valores de Crontab

Para que el cron daemon comprenda correctamente las instrucciones, debe utilizarse la sintaxis crontab correcta. La sintaxis de crontab consta de cinco campos. Cada uno de ellos puede rellenarse con cualquiera de los valores que se muestran en la siguiente tabla:

CampoValores posibles
Minuto0-59
Hora0-23
Día del mes1-31
Mes1-12
Día de la semana0-6. 0 representa el domingo. En algunos sistemas, el valor 7 representa el domingo.
ComandoOrden a ejecutar

Aparte de los valores de crontab posibles, es necesario memorizar algunos caracteres especiales:

SímboloSignificadoEjemplo
* (asterisco)Seleccionar todos los valores posibles de un campoColoca * en el campo hora para ejecutar la tarea cada hora
, (coma)Se utiliza una coma para separar varios valores0,3,5 en el campo día de la semana hará que la tarea se ejecute el domingo y el miércoles
– (guión)Permite fijar un intervalo de valores10-15 en el campo día del mes ejecutará la tarea desde el día 10 al 15 del mes
/ (separador)Se utiliza un separador para dividir los valores*/10 en el campo hora hará que la tarea se ejecute cada 10 horas
LSe utiliza en los campos de día del mes o día de la semana1L en el campo día de la semana ejecutará la tarea el último lunes de un mes determinado
WW se utiliza para determinar el día de la semana más próximo0W en el campo día del mes hará que la tarea se ejecute el domingo más cercano de un mes determinado
# (numeral)Se utiliza para determinar el día de la semana2#3 en el campo día del mes hará que la tarea se ejecute el tercer martes del mes
? (signo de interrogación)Se utiliza en los campos de día del mes y día de la semana? en el campo del día del mes se leerá como sin valor específico

¡Importante! Ten en cuenta que todos los campos deben rellenarse al crear una tarea cron. Si no deseas especificar un campo, rellénalo con el símbolo * (asterisco).

Comandos Crontab

Sólo se utilizan unos pocos comandos cron en la línea de comandos, lo que facilita la creación, eliminación y gestión de entradas cron:

  • crontab -e: se utiliza para editar crontabs del sistema. Este comando creará un nuevo crontab si aún no se ha hecho.
  • crontab -l: se utiliza para ver las entradas crontab (trabajos cron) y mostrar el contenido del archivo crontab del sistema.
  • crontab -r: eliminará el archivo crontab actual.
  • crontab -i: mostrará un aviso antes de eliminar el crontab de un usuario. Se recomienda utilizarlo junto con el indicador -r, convirtiéndolo en el indicador -ri.

Cómo utilizar Crontab: ejemplos de sintaxis Crontab

En primer lugar, utiliza el comando crontab para crear tu primera entrada crontab:

crontab -e

Te pedirá que elijas un editor de texto. Te recomendamos usar nano, la primera opción en nuestro ejemplo:

Ejemplo Crontab con editor nano

Después, serás dirigido al archivo crontab. Para añadir nuevas entradas, simplemente elige una nueva línea y continúa con el cronjob.

¡Importante! Ten en cuenta que crontab utiliza la fecha y hora actuales del sistema, lo que significa que la zona horaria se comparte con el sistema raíz.

Programar un trabajo para una hora determinada

Una de las formas más sencillas de probar cron es programar una tarea para una hora determinada. Por ejemplo, la siguiente tarea cron ejecutará nuestro script .sh a la hora especificada, que es el 15 de agosto a las 15:30.

30 08 10 06 * cat /helloworld.sh

Ver entradas Crontab

Dado que todas las tareas cron se almacenan en un archivo crontab, puedes ver las que ya se están ejecutando. Para ello, utiliza el siguiente comando para mostrar el contenido de tus archivos crontab:

crontab -l
Comando crontab para ver entradas

Editar entradas Crontab

Para modificar entradas crontab ya existentes, utiliza este comando:

crontab -e

Programar un trabajo para cada minuto

No supone ningún esfuerzo programar tareas para que se ejecuten cada minuto. En el siguiente ejemplo, ordenaremos la ejecución del comando cat para que se ejecute periódicamente:

* * * * * cat /home/helloworld.sh
Programar una tarea cada minuto con comando cat

Programar un trabajo de fondo cada día

Para programar una tarea en segundo plano que se ejecute todos los días, puedes utilizar el comando cron @daily:

@daily cat /home/helloworld.sh

Ten en cuenta que se va a ejecutar el script todos los días a las 12 de la mañana.

Programar un trabajo para un intervalo de tiempo determinado

Es posible programar un trabajo para un intervalo de tiempo determinado. Por ejemplo, todos los días de la semana, incluidos los fines de semana, de 8.00 a 17.00. El resultado final sería el siguiente:

00 08-17 * * * cat /home/helloworld.sh

Aquí hay otro ejemplo del mismo cron, pero sólo los fines de semana:

00 08-17 * * 6-0 cat /home/helloworld.sh

Programar un Cron Job al principio de cada mes

Para programar un trabajo al principio de cada mes, puedes utilizar el operador @monthly:

@monthly cat /home/helloworld.sh

Ten en cuenta que esto ejecutará el trabajo a las 12am del primer día de cada mes. Del mismo modo, existe un operador @yearly que ejecutará el trabajo el primer día de cada año.

Programar un trabajo para más de una vez

Los usuarios pueden programar una tarea cron para que se ejecute más de una vez, por ejemplo, cinco veces al día. En el siguiente ejemplo, configuraremos un trabajo para que se ejecute a las 12pm, 3pm, 5pm, 7pm y 9pm.

0 12,15,17,19,21 * * * cat /home/helloworld.sh

Ejecutar un comando Linux después de cada reinicio

De forma similar a los operadores @daily, @monthly y @yearly, bash también viene con un comando @reboot. Los usuarios pueden utilizarlo para programar una tarea que se ejecutará cada vez que el sistema se reinicie:

@reboot cat /home/helloworld.sh

¿Dónde se encuentra el archivo Crontab?

Dependiendo del sistema operativo, crontab estará ubicado en tres lugares diferentes:

  • MacOS: /var/at/tabs
  • Sistemas basados en Debian: /var/spool/cron/crontabs/
  • Sistemas basados en Red Hat: /var/spool/cron

Acciones adicionales de Crontab

Aparte de la funcionalidad actual, crontab también es capaz de realizar acciones adicionales como crear un registro de ejecución cron o desactivar las notificaciones por correo electrónico. Consulta las secciones siguientes para obtener más información.

Crear un archivo de registro

La forma más sencilla de registrar todas las salidas de los trabajos cron es utilizar la siguiente lógica:

* * * * * cat /home/helloworld.sh >> /var/log/logs.log 2>&1

Este comando guardará todas las salidas de los trabajos cron en un archivo llamado logs.log

Desactivar correo electrónico

Dado que cron envía un correo electrónico al usuario después de cada trabajo, desactivar esta funcionalidad puede ser beneficioso para evitar el spam. Sólo tienes que añadir esta línea al final de tu trabajo cron:

>/dev/null 2>&1

Entorno Crontab

Crontab permite a sus usuarios definir variables de entorno. Esto puede hacerse con el comando crontab -e antes mencionado. Al definir variables, consulta la lista siguiente:

  • PATH: ruta por defecto para crontab.
  • SHELL: shell por defecto.
  • LOGNAME: propietario de crontab. La información se toma del directorio /etc/passwd.
  • HOME: directorio personal del usuario. La información se toma del directorio /etc/passwd.

Conclusión

Los cron jobs son una de las mejores formas de realizar tareas programadas para instancias virtuales y sistemas Linux físicos. Con los cron jobs, los usuarios pueden programar varias tareas para su sistema. Por ejemplo, realizar el mantenimiento del sistema en un día concreto o incluso programarlo para que se ejecute todos los días de la semana.

En este tutorial, hemos cubierto la mayoría de las operaciones de crontab. También hemos proporcionado algunos ejemplos prácticos que puedes utilizar al crear un crontab.

Si tienes alguna pregunta o sugerencia para usar cron, no dudes en dejarla en la sección de comentarios.

Author
El autor

Diego Vargas

Diego es comunicador social, especialista en publicidad digital que trabaja constantemente en mejorar sus conocimientos de marketing digital, enfocándose en contenido y SEO. Idiomas, series, libros y cursos en internet son sus hobbies principales, además de los deportes. Este es su perfil de LinkedIn.