howtos/Linux/crons y crontab.txt

70 lines
3.7 KiB
Plaintext

Utilizando crontab
Ejecutamos la edición del crontab con crontab -e, en algunas distros (como ubuntu) nos da la opcion de elegir el editor de textos que deseemos, los demás nos quedamos con vi. El archivo crontab lucirá algo asi.
# m h dom mon dow user command
donde:
- m corresponde al minuto en que se va a ejecutar el script, el valor va de 0 a 59
- h la hora exacta, se maneja el formato de 24 horas, los valores van de 0 a 23, siendo 0 las 12:00 de la medianoche.
- dom hace referencia al día del mes, por ejemplo se puede especificar 15 si se quiere ejecutar cada dia 15
- dow significa el día de la semana, puede ser numérico (0 a 7, donde 0 y 7 son domingo) o las 3 primeras letras del día en inglés: mon, tue, wed, thu, fri, sat, sun.
- user define el usuario que va a ejecutar el comando, puede ser root, u otro usuario diferente siempre y cuando tenga permisos de ejecución del script.
- command refiere al comando o a la ruta absoluta del script a ejecutar, ejemplo: /home/usuario/scripts/actualizar.sh, si acaso llama a un script este debe ser ejecutable
Para que quedara claro unos cuantos ejemplos de tareas de cron explicados:
Ejecutará el script actualizar.sh a las 10:15 a.m. todos los días
15 10 * * * usuario /home/usuario/scripts/actualizar.sh
Ejecutará el script actualizar.sh a las 10:15 p.m. todos los días
15 22 * * * usuario /home/usuario/scripts/actualizar.sh
Ejecutará una actualización todos los domingos a las 10:00 a.m
00 10 * * 0 root apt-get -y update Usuario root
Usuario root ejecutará una actualización todos los domingos (sun) a las 10:45 a.m
45 10 * * sun root apt-get -y update
El día 20 de noviembre a las 7:30 el usuario correra el script
30 7 20 11 * usuario /home/usuario/scripts/actualizar.sh
El día 11 de noviembre a las 7:30 a.m. y que sea domingo, el usuario festejará su sysadmin (o sea a mí)
30 7 11 11 sun usuario /home/usuario/scripts/pastel_con_velitas.sh
Un molesto recordatorio cada minuto de cada hora todos los días (NO recomendable).
01 * * * * usuario /home/usuario/scripts/molestorecordatorio.sh
Igual se pueden manejar rangos especiales:
A las 5:30 de la tarde todos los días de lunes a viernes.
30 17 * * 1,2,3,4,5
A las 12 del día todos los días primero, quince y 28 de cada mes (ideal para nóminas)
00 12 1,15,28 * *
Si esto resulta confuso, crontab maneja cadenas especiales para definir estos rangos.
@reboot Ejecuta una vez, al inicio
@yearly ejecuta sólo una vez al año: 0 0 1 1 *
@annually igual que @yearly
@monthly ejecuta una vez al mes, el día primero: 0 0 1 * *
@weekly Semanal el primer minuto de la primer hora de la semana. 0 0 * * 0″.
@daily diario, a las 12:00A.M. 0 0 * * *
@midnight igual que @daily
@hourly al primer minuto de cada hora: 0 * * * *
Su uso es muy sencillo.
@hourly usuario /home/usuario/scripts/molestorecordatorio.sh
@monthly usuario /home/usuario/scripts/respaldo.sh
@daily root apt-get update && apt-get -y upgrade
Por último y no menos importante: Administracion de trabajos en cron
Remplaza el existente archivo crontab con un archivo definido por el usuario
crontab archivo
Editar el archivo crontab del usuario, cada linea nueva sera una nueva tarea de crontab.
crontab -e
Lista todas las tareas de crontab del usuario
crontab -l
Borra el crontab del usuario
crontab -d
Define el directorio de crontab del usuario (este debe tener permisos de escritura y ejecucion del usuario)
crontab -c dir
Prefijo para manejar el crontab de otro usuario, ejemplos:
crontab -u usuario
$ sudo crontab -l -u root
$ sudo crontab -e usuario2
#crontab -d -u usuario
Listar usuarios con tareas cron: "ls -la /var/spool/cron"
Sacar las tareas que ejecutan los usuarios y salvarla a texto plano: "crontab -l -u usuario__que_ejecuta_tarea > usuario_tareas_cron"