Comandos LinuxExplicados en español
/
Ficha74 / 104
Categoría
Sistema
Ejemplos
6
Ver también
systemctl · journalctl · chmod · nano

crontab

cron table (tabla de cron)

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.

Sintaxiscrontab [-u USUARIO] [-i] {-e | -l | -r} | crontab [-u USUARIO] ARCHIVO
Precaución

crontab -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.

§ 1

Despiece

6 ejemplos
Ver tus tareas programadas

Ver tus tareas programadas

2 piezas
Lámina01 / 06
Comandocrontab -l
Piezas2
Escala1:1
N.ºPiezaTipoQué hace
1crontabComandoEl comando que maneja tu tabla de tareas programadas.
2-lOpciónLista las tareas de tu usuario.
Resultado

Imprime las líneas de tu crontab. Si nunca has creado una, sale el mensaje no crontab for tu-usuario.

Agregar o editar tareas

2 piezas
Lámina02 / 06
Comandocrontab -e
Piezas2
Escala1:1
N.ºPiezaTipoQué hace
1crontabComandoEl comando que maneja tu tabla de tareas programadas.
2-eOpciónAbre tu crontab en el editor.
Resultado

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

2 piezas
Lámina03 / 06
Comando0 3 * * * /home/juan/respaldo.sh
Piezas2
Escala1:1
N.ºPiezaTipoQué hace
10 3 * * *ValorLos 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.shArgumentoEl comando que se ejecuta, con ruta absoluta. El script debe tener permiso de ejecución.
Resultado

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

4 piezas
Lámina04 / 06
Comandocrontab -l > mi-crontab.txt
Piezas4
Escala1:1
N.ºPiezaTipoQué hace
1crontabComandoEl comando que maneja tu tabla de tareas programadas.
2-lOpciónImprime tus tareas.
3>OperadorManda la salida a un archivo en lugar de a la pantalla. Si el archivo existe, lo sobrescribe.
4mi-crontab.txtArgumentoEl archivo donde queda el respaldo.
Resultado

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

2 piezas
Lámina05 / 06
Comandocrontab -ri
Piezas2
Escala1:1
N.ºPiezaTipoQué hace
1crontabComandoEl comando que maneja tu tabla de tareas programadas.
2-riOpciónDos opciones juntas: -r borra el crontab completo e -i pide confirmación antes.
Resultado

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

5 piezas
Lámina06 / 06
Comandosudo crontab -u ana -l
Piezas5
Escala1:1
N.ºPiezaTipoQué hace
1sudoComandoEjecuta lo que sigue como root, porque solo root puede ver tablas ajenas.
2crontabComandoEl comando que maneja las tablas de tareas programadas.
3-uOpciónIndica de qué usuario es el crontab.
4anaValorEl usuario cuyo crontab quieres ver.
5-lOpciónLista sus tareas.
Resultado

Muestra las tareas programadas del usuario ana. Sin sudo responde must be privileged to use -u.

§ 2

Opciones

Las que sí vas a usar
OpciónQué hace
-eAbre tu crontab en el editor para agregar o cambiar tareas. Al guardar y salir, se instala sola.
-lMuestra las tareas que tienes programadas.
-rBorra tu crontab completo, sin pedir confirmación.
-iJunto con -r, pide que confirmes con y antes de borrar.
-u USUARIOTrabaja con el crontab de otro usuario. Solo root puede usarlo, así que va con sudo.
§ 3

Fallas comunes

FallaRemedio
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.
§ 4

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.
§ 5

Ver también