Cron en Linux: tareas, registros y bloqueo de ejecuciones

Índice de contenido
  1. Lee los cinco campos en orden
  2. Identifica la cuenta y conserva la programación
  3. Prepara un trabajo verificable
  4. Programa una prueba de un minuto
  5. Entorno, zona horaria y archivos del sistema
  6. Preguntas frecuentes
    1. ¿Cron envía siempre los errores por correo?
    2. ¿Qué ocurre si la tarea dura más que su intervalo?
    3. ¿Por qué funciona al ejecutarla a mano y falla en cron?
  7. En pocas palabras
  8. Conclusión
  9. Fuentes y documentación

Cron permite iniciar comandos siguiendo un calendario. Para utilizarlo bien necesitas entender tanto la expresión horaria como el usuario y entorno desde el que se ejecutará el trabajo.

Esta guía utiliza cron de Ubuntu o Debian y una prueba sin privilegios de administrador. Otras implementaciones pueden tener extensiones distintas. Comprueba el manual del sistema antes de trasladar una expresión entre máquinas.

Lee los cinco campos en orden

El crontab de un usuario utiliza minuto, hora, día del mes, mes y día de la semana, seguidos del comando:

# minuto hora día-mes mes día-semana comando
30 2 * * * /ruta/absoluta/tarea
0 9 * * 1 /ruta/absoluta/tarea
*/15 9-17 * * 1-5 /ruta/absoluta/tarea

La primera línea programa las 02:30 todos los días; la segunda, las 09:00 de los lunes; la tercera, los minutos 00, 15, 30 y 45 de cada hora entre 09 y 17, de lunes a viernes.

No confudas pasos dentro de un campo con un intervalo continuo. */35 en minutos selecciona 00 y 35 de cada hora; no mantiene una separación constante de 35 minutos durante todo el día.

En el cron tradicional descrito aquí, si restringes tanto el día del mes como el de la semana, basta que coincida cualquiera de los dos. Por eso 0 9 1-7 * 1 no significa únicamente el primer lunes.

Identifica la cuenta y conserva la programación

whoami
crontab -l
systemctl is-active cron
timedatectl

Si todavía no existe crontab, el listado puede informar de ello. Antes de editar uno existente, guarda una copia:

crontab -l > "$HOME/crontab-anterior.txt"
crontab -e

Revisa que la copia se haya generado correctamente. No utilices crontab -r para retirar una sola tarea: elimina toda la programación del usuario.

Prepara un trabajo verificable

En tu cuenta, crea un directorio:

mkdir -p "$HOME/tareas"
nano "$HOME/tareas/prueba-cron"

Guarda este script Bash:

#!/bin/bash
set -Eeuo pipefail
export PATH=/usr/bin:/bin
base="${HOME:?}/tareas"
exec 9>"$base/prueba.lock"
flock -n 9 || { echo "Se omitió una ejecución solapada" >&2; exit 1; }
printf '%s usuario=%s ejecución correcta\n' "$(date -Is)" "$(id -un)"

Hazlo ejecutable y comprueba la salida manual:

chmod 0700 "$HOME/tareas/prueba-cron"
"$HOME/tareas/prueba-cron"

El bloqueo evita dos instancias simultáneas de este script. No coordina automáticamente otros programas ni garantiza exclusión entre varios servidores.

Programa una prueba de un minuto

En crontab -e agrega lo siguiente después de sustituir USUARIO por tu nombre real y confirmar la ruta:

SHELL=/bin/sh
PATH=/usr/local/bin:/usr/bin:/bin
* * * * * /home/USUARIO/tareas/prueba-cron >> /home/USUARIO/tareas/prueba.log 2>&1

La carpeta y el archivo de script deben ser accesibles por esa cuenta. La redirección también necesita permisos de escritura. Espera un par de minutos y revisa:

tail -n 10 "$HOME/tareas/prueba.log"
crontab -l

Busca horas distintas y el usuario previsto. Después sustituye la frecuencia de prueba por la necesaria, por ejemplo 30 2 * * * para ejecución diaria a las 02:30.

Un log con fechas nuevas confirma que la prueba corrió. Para el trabajo real, registra además su resultado y verifica el producto esperado, como un archivo válido o una respuesta del sistema destino.

Entorno, zona horaria y archivos del sistema

Cron no carga necesariamente tu sesión interactiva, alias, entorno virtual ni agente SSH. Utiliza rutas explícitas y prepara credenciales con permisos limitados. Los signos % en el comando tienen significado especial en esta implementación; para expresiones complejas, utiliza un script.

Comprueba la zona horaria que usa el daemon. Definir TZ dentro del comando puede cambiar la hora que imprime un programa sin cambiar cuándo lo lanza cron. No asumas soporte de CRON_TZ en todas las distribuciones.

Los cambios de hora y las tareas perdidas durante un apagado dependen de la implementación y configuración. Si necesitas recuperación de ejecuciones o calendarios más expresivos, evalúa un timer de systemd y sus opciones.

En /etc/cron.d y /etc/crontab existe un campo adicional para el usuario:

30 2 * * * root /usr/local/sbin/backup-sitio

No copies ese campo root al crontab personal. Tampoco programes la misma tarea allí y en /etc/cron.daily salvo que busques dos ejecuciones.

Preguntas frecuentes

¿Cron envía siempre los errores por correo?

No. Necesita un transporte de correo operativo y una configuración que permita entregarlo. Registra la salida y prueba cualquier canal de aviso que elijas.

¿Qué ocurre si la tarea dura más que su intervalo?

Cron puede iniciar otra instancia. Utiliza un bloqueo cuando el solapamiento sea perjudicial y registra las ejecuciones omitidas.

¿Por qué funciona al ejecutarla a mano y falla en cron?

Suelen diferir usuario, directorio, PATH, variables y permisos. Reproduce el entorno, registra el error y comprueba cada dependencia sin asumir que se carga tu sesión.

En pocas palabras

Una tarea programada necesita horario, identidad, entorno y evidencia de ejecución. Cron inicia procesos cuando corresponde; tu script debe controlar errores y evitar solapamientos cuando puedan causar problemas.

Conclusión

Prueba primero una tarea pequeña y visible bajo la cuenta definitiva. Después añade el trabajo real, revisa su salida y documenta qué hacer si falla o no llega a ejecutarse.

Para continuar, revisa Cómo instalar Ubuntu desde una USB: paso a paso y Cómo instalar Docker en Ubuntu 24.04: guía práctica paso a paso.

Fuentes y documentación

Documentación de manpages.debian.org.

Documentación de manpages.debian.org.

Documentación de manpages.debian.org.

Subir

Descubre más de Sergio Caballero

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Continuar leyendo