Linux / Cómo Usar Crontab

En Linux, usar crontab le permite ejecutar repetidamente comandos o scripts en horarios específicos. Con crontab -e, puede editar las tareas programadas del usuario actual, ingresando cinco campos de tiempo y el comando a ejecutar en una sola línea.

Diferencia Entre cron y crontab

cron es un servicio que revisa y ejecuta regularmente las tareas programadas. crontab es una lista de tareas que registra los tiempos de ejecución y los comandos, generalmente gestionada por separado para cada usuario. Los ejemplos en este artículo se basan en el crontab típico de usuario de las series Debian y Ubuntu. Los métodos de instalación, los nombres de los servicios y las funciones compatibles pueden variar según la distribución y la implementación de cron.

Las tareas programadas se ejecutan con los privilegios del propietario del crontab correspondiente. Si se requieren privilegios que no posee el usuario actual, configure cuidadosamente la cuenta de administrador y la cuenta de ejecución, y no cree tareas con privilegios innecesariamente amplios. Las tareas programadas para un momento en que la computadora esté apagada o el servicio cron esté detenido no se ejecutarán.

Comprobación y edición de Crontab

En la terminal, use el siguiente comando para comprobar las tareas programadas del usuario actual. Si aparece un mensaje indicando que no hay lista, significa que este usuario aún no tiene un crontab.

crontab -l

Para agregar o modificar tareas, ejecute el siguiente comando. La pantalla de selección del editor puede aparecer la primera vez que lo ejecute. Después de guardar el archivo y salir del editor, cron comprobará la sintaxis e instalará la nueva lista. Si aparece un error, edítelo nuevamente según las instrucciones y confirme que se muestra el mensaje de instalación.

crontab -e

Las tareas programadas para la cuenta de administrador son independientes de las del usuario actual. Solo edite la lista de root con sudo crontab -e y verifíquela con sudo crontab -l cuando se requieran privilegios administrativos. No confunda las dos listas.

Para eliminar una tarea individual, borre solo esa línea con crontab -e y guárdela. crontab -r elimina toda la lista de tareas programadas del usuario actual, por lo que verifique la lista antes de usarla y respáldela en un lugar seguro si es necesario. Puede respaldarla con crontab -l > ~/crontab-backup.txt, y si se necesita restauración, reinstale todo el archivo con crontab ~/crontab-backup.txt. La restauración sobrescribirá la lista actual, así que primero verifique cualquier cambio.

Formato de la hora programada

Cada trabajo en un crontab de usuario consiste en cinco campos de tiempo seguidos del comando. En los archivos de crontab del sistema, como /etc/crontab o /etc/cron.d/, se añade un campo adicional de usuario de ejecución entre los campos de tiempo y el comando, por lo que no copie el formato siguiente tal como está.

minute hour day-of-month month day-of-week command
Campo Rango permitido Significado
minuto 0–59 Minuto
hora 0–23 Hora
día-del-mes 1–31 Fecha
mes 1–12 Mes
día-de-la-semana 0–7 Día de la semana. 0 y 7 son domingo

* se refiere a todos los valores en el campo. Una coma especifica múltiples valores (10,20), un guion especifica un rango (1-5), y una barra diagonal especifica intervalos dentro de un rango (*/10). Por ejemplo, */10 en el campo de minutos significa 0, 10, 20, 30, 40, 50 minutos cada hora. Los intervalos se interpretan dentro de cada campo, por lo que no siempre garantizan el mismo espaciado basado en el tiempo transcurrido.

Si tanto el día del mes como el día de la semana están restringidos, cron en Debian ejecuta la tarea cuando se cumple cualquiera de las dos condiciones. Por ejemplo, 0 4 1 * 1 se ejecuta a las 4 a. m. el primer día del mes y todos los lunes, no solo cuando el primero es lunes. Consulte man 5 crontab o la documentación de Debian sobre el formato crontab para más detalles.

Ejemplos de trabajos programados

Reemplaza /home/user/bin/backup.sh en el siguiente ejemplo con la ruta absoluta del script real. El usuario debe tener acceso al script y a los archivos de destino, y si ejecuta el script directamente, también necesita permisos de ejecución y la especificación correcta del intérprete. Primero, ejecútalo en el terminal con la misma cuenta para verificar los resultados.

0 4 * * * /home/user/bin/backup.sh
0 4 * * 1-5 /home/user/bin/backup.sh
*/10 4 * * * /home/user/bin/backup.sh

La primera línea se ejecuta todos los días a las 4 a.m., la segunda línea se ejecuta de lunes a viernes a las 4 a.m., y la tercera línea se ejecuta cada 10 minutos desde las 4 a.m. hasta las 4:50 a.m. Los ejemplos son horarios independientes. Cuando se ingresen todos, todas las tareas en cada línea se registrarán.

Registrar y probar un trabajo de manera segura

Al practicar, en lugar de una copia de seguridad real, intenta usar una tarea que deje un registro en el directorio personal del usuario actual.

  1. Ejecuta crontab -e, agrega la siguiente línea única, luego guarda y sal. La fecha y hora se añadirán al archivo cada minuto.
* * * * * /bin/date >> "$HOME/cron-test.log" 2>&1
  1. Ejecuta crontab -l para verificar la entrada instalada. Después de 1–2 minutos, ejecuta cat ~/cron-test.log y verifica que se haya agregado un registro.
  2. Una vez confirmado, elimine solo la entrada de práctica con crontab -e y guarde. Puede eliminar el archivo de registro después de revisar su contenido.

Si la práctica no funciona, verifique si el servicio cron está instalado y en ejecución. En un paquete cron típico de Ubuntu, puede ver el estado con systemctl status cron. El nombre del servicio y la ubicación del registro varían según la distribución, y en un entorno Ubuntu que use el journal de systemd, puede consultar los registros del servicio con journalctl -u cron.

Puntos a verificar cuando no se ejecuta

cron puede ejecutarse en un entorno diferente al del shell de inicio de sesión. Especifique los comandos y scripts con rutas absolutas siempre que sea posible, y defina claramente las variables de entorno requeridas y los directorios de trabajo en el script. Para comprobar errores, también puede redirigir la salida y los errores del trabajo a un archivo de registro al que el usuario pueda acceder. Dado que los registros pueden contener información sensible, tenga cuidado con los permisos de acceso y los períodos de retención.

Verifique si la hora del sistema y la zona horaria son las esperadas, si la cuenta de ejecución puede acceder a los archivos y si existe la posibilidad de ejecuciones superpuestas. El % utilizado en los comandos se trata de manera especial por cron, por lo que para pasarlo literalmente, generalmente necesita escaparse con \%. Consulte la documentación del cron que está utilizando para obtener el comportamiento exacto.