Qué es cron y cómo programar sus tareas
Autor: Redacción Domeny.ForSale Publicado
En resumen: Cron es un mecanismo de los sistemas Unix y Linux que ejecuta automáticamente comandos o scripts según una programación establecida. Permite hacer copias de seguridad, generar informes o eliminar archivos antiguos, por ejemplo, todos los días a las 2:30. Para que una tarea funcione correctamente, hay que definir no solo cuándo se ejecutará, sino también el comando, los permisos y cómo comprobar los errores.
¿Cómo funciona cron y para qué sirve?
Cron funciona en segundo plano como un servicio del sistema: consulta la programación y ejecuta los comandos correspondientes. Cada comando con una hora de ejecución asignada se denomina tarea cron, y crontab es la tabla que almacena la programación de las tareas.
Entre sus usos habituales están la exportación nocturna de una base de datos, la obtención de datos de un sistema externo, el recálculo de informes y la limpieza de archivos temporales. Cron se encarga de iniciar la operación, pero no de su lógica. Si el script de copia de seguridad contiene un error, la programación no lo corregirá ni confirmará que la copia pueda restaurarse.
La tarea se ejecuta con los permisos del usuario al que pertenece la entrada. Normalmente no es necesario ejecutarla como administrador del sistema. La cuenta solo debe tener acceso a los archivos y recursos necesarios para esa operación.
¿Cómo se interpreta la programación?
En un crontab de usuario típico, cada entrada consta de cinco campos de tiempo y un comando. De izquierda a derecha, los campos indican: minuto, hora, día del mes, mes y día de la semana.
30 2 * * * /usr/bin/python3 /home/ana/scripts/informe.py
Esta entrada ejecuta el script todos los días a las 2:30. El asterisco representa cualquier valor válido del campo, por lo que los tres asteriscos corresponden a cualquier día del mes, mes y día de la semana.
| Programación | Significado |
|---|---|
*/15 * * * * | Cada cuarto de hora: en los minutos 0, 15, 30 y 45 |
0 8 * * 1-5 | De lunes a viernes a las 8:00 |
0 3 1 * * | El primer día de cada mes a las 3:00 |
La barra indica el intervalo dentro de un campo, el guion define un rango y la coma separa valores, como 0,30 en el campo de los minutos. La expresión */15 no significa «15 minutos después de que termine la tarea anterior»: la programación se rige por el reloj.
Hay que tener cuidado al restringir a la vez el día del mes y el día de la semana. En las implementaciones habituales de cron, basta con que se cumpla una de esas dos condiciones, no ambas. Antes de usar una expresión así, consulta la documentación de la versión disponible en el servidor.
Los archivos del sistema, como /etc/crontab, incluyen además un campo de usuario antes del comando. No copies sus entradas sin adaptarlas a tu crontab personal.
¿Cómo configurar tu primera tarea cron?
En un servidor con cron instalado y acceso al terminal, puedes seguir este procedimiento. Las rutas de los ejemplos son ilustrativas: sustitúyelas por las ubicaciones reales de tu cuenta.
Prueba el comando manualmente. Ejecuta
/usr/bin/python3 /home/ana/scripts/informe.pycon el mismo usuario que ejecutará la tarea.Abre la programación con el comando
crontab -e.Añade una entrada que guarde la salida en un archivo:
30 2 * * * /usr/bin/python3 /home/ana/scripts/informe.py >> /home/ana/registros/informe.log 2>&1Guarda los cambios y comprueba las entradas con el comando
crontab -l.Después de la hora programada, comprueba el resultado, por ejemplo, el informe generado, y el contenido del archivo de registro.
El operador >> añade los mensajes al final del archivo, y 2>&1 envía también a ese archivo los mensajes de error. El directorio registros debe existir previamente y permitir que el usuario de la tarea escriba en él. El registro puede crecer indefinidamente, por lo que, si se usa de forma continua, necesita un límite de tamaño o una rotación, es decir, el archivado periódico y la eliminación de entradas antiguas.
En un alojamiento compartido, la programación suele configurarse desde el panel en lugar del terminal. Confirma en la documentación del proveedor el intervalo mínimo entre ejecuciones, los intérpretes disponibles y los límites de tiempo de ejecución.
¿Por qué falla la tarea si el comando funciona manualmente?
Cron ejecuta los comandos en un entorno más limitado que el de un terminal interactivo. Puede que no disponga de las mismas variables de entorno, rutas a los programas o ajustes del intérprete de comandos. Por eso, usa rutas completas y no des por hecho que el directorio de trabajo será el del script.
Si el programa debe ejecutarse desde un directorio concreto, la entrada puede ser así:
0 6 * * * cd /home/ana/aplicacion && /usr/bin/python3 informe.py
Si la tarea no produce resultados, comprueba, en este orden: el funcionamiento del servicio cron, la cuenta que ejecuta la tarea, los permisos, las rutas, las variables necesarias y los registros del sistema y de la aplicación. La ausencia de un mensaje de error no demuestra que todo haya salido bien: el script debe indicar los fallos y permitir verificar el resultado.
La hora de ejecución también depende de la configuración de la zona horaria. Confírmala en el servidor o en el panel de alojamiento, sobre todo si esperas que las tareas se ejecuten según la hora de Polonia. Durante los cambios de hora, el comportamiento de las tareas programadas para una hora que se omite o se repite depende de la implementación.
¿Qué limitaciones tiene cron?
Por lo general, cron clásico no recupera las ejecuciones omitidas mientras el servidor estaba apagado. Tampoco evita automáticamente que las tareas se solapen: si un script tarda 20 minutos y se inicia cada 10 minutos, pueden ejecutarse dos copias a la vez. Para las operaciones sobre datos compartidos, utiliza un bloqueo, por ejemplo, el mecanismo flock disponible en muchos sistemas Linux.
Para tareas que deban recuperar ejecuciones omitidas, puedes considerar anacron o temporizadores de systemd configurados adecuadamente. Si necesitas poner operaciones en cola y reintentar las que fallen, una cola de tareas puede ser una solución más apropiada.
Tampoco confundas cron del sistema con WP-Cron de WordPress. De forma predeterminada, WP-Cron comprueba las tareas programadas cuando el sitio recibe solicitudes, por lo que su ejecución puede retrasarse si hay poco tráfico.
Empieza automatizando una tarea no crítica y registrando sus resultados. Solo después de confirmar que produce el resultado esperado, úsala para eliminar datos o realizar copias de seguridad.
Consulta también: ¿Qué es 2FA?
