crontab
Programa comandos para que se ejecuten solos a horas y fechas fijas.
Edita y muestra tu tabla de cron: la lista de comandos que el servicio cron ejecuta por ti a la hora que indiques. Lo usas para respaldos, limpiezas o cualquier tarea que quieras repetir sin hacerla a mano. Cada usuario tiene su propia tabla.
crontab [-u USUARIO] [-i] {-e | -l | -r} | crontab [-u USUARIO] ARCHIVOcrontab -r borra todas tus tareas sin preguntar y no hay forma de recuperarlas. La r está junto a la e en el teclado, así que es fácil teclearla por error en lugar de crontab -e. Guarda un respaldo con crontab -l > mi-crontab.txt antes de hacer cambios grandes.
Despiece
6 ejemplosVer tus tareas programadas
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | crontab | Comando | El comando que maneja tu tabla de tareas programadas. |
| 2 | -l | Opción | Lista las tareas de tu usuario. |
Imprime las líneas de tu crontab. Si nunca has creado una, sale el mensaje no crontab for tu-usuario.
Agregar o editar tareas
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | crontab | Comando | El comando que maneja tu tabla de tareas programadas. |
| 2 | -e | Opción | Abre tu crontab en el editor. |
Se abre tu crontab en el editor. La primera vez en Debian y Ubuntu te pregunta cuál quieres usar; nano es el más fácil. Escribes una tarea por línea, guardas y sales: verás crontab: installing new crontab.
Línea de crontab: respaldo diario a las 3 de la mañana
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | 0 3 * * * | Valor | Los cinco campos de tiempo, en orden: minuto (0-59), hora (0-23), día del mes (1-31), mes (1-12) y día de la semana (0-7, donde 0 y 7 son domingo). El asterisco significa cualquiera. |
| 2 | /home/juan/respaldo.sh | Argumento | El comando que se ejecuta, con ruta absoluta. El script debe tener permiso de ejecución. |
Esta línea no se escribe en la terminal: va dentro de tu crontab, que abres con crontab -e. Hace que el script corra todos los días a las 3:00 de la mañana.
Respaldar tu crontab en un archivo
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | crontab | Comando | El comando que maneja tu tabla de tareas programadas. |
| 2 | -l | Opción | Imprime tus tareas. |
| 3 | > | Operador | Manda la salida a un archivo en lugar de a la pantalla. Si el archivo existe, lo sobrescribe. |
| 4 | mi-crontab.txt | Argumento | El archivo donde queda el respaldo. |
Tus tareas quedan guardadas en mi-crontab.txt. Si algún día las borras o cambias de equipo, las restauras con crontab mi-crontab.txt, que reemplaza tu crontab completo con el contenido del archivo.
Borrar tu crontab pidiendo confirmación
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | crontab | Comando | El comando que maneja tu tabla de tareas programadas. |
| 2 | -ri | Opción | Dos opciones juntas: -r borra el crontab completo e -i pide confirmación antes. |
Pregunta crontab: really delete tu-usuario's crontab? (y/n) y solo borra si contestas y. Cualquier otra respuesta lo cancela.
Ver el crontab de otro usuario
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | sudo | Comando | Ejecuta lo que sigue como root, porque solo root puede ver tablas ajenas. |
| 2 | crontab | Comando | El comando que maneja las tablas de tareas programadas. |
| 3 | -u | Opción | Indica de qué usuario es el crontab. |
| 4 | ana | Valor | El usuario cuyo crontab quieres ver. |
| 5 | -l | Opción | Lista sus tareas. |
Muestra las tareas programadas del usuario ana. Sin sudo responde must be privileged to use -u.
Opciones
Las que sí vas a usar| Opción | Qué hace |
|---|---|
| -e | Abre tu crontab en el editor para agregar o cambiar tareas. Al guardar y salir, se instala sola. |
| -l | Muestra las tareas que tienes programadas. |
| -r | Borra tu crontab completo, sin pedir confirmación. |
| -i | Junto con -r, pide que confirmes con y antes de borrar. |
| -u USUARIO | Trabaja con el crontab de otro usuario. Solo root puede usarlo, así que va con sudo. |
Fallas comunes
| Falla | Remedio |
|---|---|
| La tarea funciona en la terminal pero en cron no hace nada. | cron corre con un entorno mínimo: PATH reducido, sin tus alias ni tus variables. Usa rutas absolutas para todo (/usr/bin/python3, /home/juan/datos) y guarda la salida para ver el error: agrega >> /home/juan/tarea.log 2>&1 al final de la línea. También puedes revisar con journalctl -u cron. |
| Usar el signo % en la línea, por ejemplo con date +%F, y que el comando salga cortado. | En crontab el % significa salto de línea y corta el comando ahí. Escríbelo como \% dentro de la línea: date +\%F. |
| Poner día del mes y día de la semana esperando que se cumplan los dos. | Si los dos campos tienen algo distinto de *, cron ejecuta la tarea cuando se cumple cualquiera de los dos. 0 9 1 * 1 corre el día 1 de cada mes y además todos los lunes. |
| Escribir crontab -r cuando querías crontab -e. | -r borra todo sin preguntar. Respalda seguido con crontab -l > mi-crontab.txt; si ya pasó y tienes respaldo, lo restauras con crontab mi-crontab.txt. |
Preguntas frecuentes
- ¿Cómo veo mis tareas programadas en cron?
- Con crontab -l. Solo muestra las de tu usuario; las del sistema están en /etc/crontab y en la carpeta /etc/cron.d. Para ver las de otro usuario necesitas sudo crontab -u usuario -l.
- ¿Cuál es el formato de una línea de crontab?
- Cinco campos de tiempo y luego el comando: minuto (0-59), hora (0-23), día del mes (1-31), mes (1-12) y día de la semana (0-7, donde 0 y 7 son domingo). Un * significa cualquiera, */15 en minutos significa cada 15 minutos y 1-5 en día de la semana es de lunes a viernes.
- ¿Qué significa 0 3 * * * en cron?
- Minuto 0 de la hora 3, cualquier día del mes, cualquier mes y cualquier día de la semana. O sea, todos los días a las 3:00 de la mañana, según la hora del servidor.
- ¿Cómo ejecuto un script cada 5 minutos con cron?
- Abre crontab -e y agrega */5 * * * * /ruta/completa/script.sh. El script necesita permiso de ejecución (chmod +x) y conviene que use rutas absolutas, porque cron no carga tu PATH.
- ¿Por qué mi crontab no se ejecuta?
- Casi siempre es el entorno: cron no conoce tu PATH ni tus variables, así que un comando sin ruta absoluta no se encuentra. Revisa también que el servicio esté activo con systemctl status cron y manda la salida a un archivo con >> archivo.log 2>&1 para ver el error.