Ejemplos de Crontab
Introducción
El comando crontab se utiliza en sistemas UNIX para programar la ejecución de otros comandos, es decir, para automatizar tareas.
Para verlos:
sudo crontab -l |
Para editarlos:
sudo crontab -e |
Borra el crontab
sudo crontab -d |
Define el directorio del crontab del usuario (este debe tener permisos de escritura y ejecución del usuario)
crontab -c dir |
Prefijo para manejar el crontab de otro usuario, ejemplos:
$ sudo crontab -l -u root $ sudo crontab -e usuario2 # crontab -d -u usuario |
Formato de las tareas
m h dom mon dow user command > /dev/null 2>&1 |
De izquierda a derecha.
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 del mes.
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/test1.sh, si acaso llama a un script este debe ser ejecutable.
Al final se añade > /dev/null 2>&1
para que cualquier dato generado por la ejecución de este proceso se descarte y sea enviado al dispositivo nulo del sistema (/dev/null) y que también se envíe la salida de STDERR hacia STDOUT.
Ejemplos
Ejecutará el script test1.sh a las 10:15 a.m. todos los días
15 10 * * * usuario /home/usuario/scripts/test1.sh |
Usuario root ejecutará una actualización todos los domingos a las 10:00 a.m
00 10 * * 0 root apt-get -y update |
El día 20 de noviembre a las 7:30 el usuario correrá el script
30 7 20 11 * usuario /home/usuario/scripts/test1.sh |
El usertest ejecutará el script el día 10 de febrero a las 00:30 a.m. y que sea domingo.
30 0 10 2 sun usertest /home/usertest/scripts/test1.sh |
Se ejecutará a las 5:30 de la tarde todos los días de lunes a viernes.
30 17 * * 1,2,3,4,5 /home/usuario/scripts/test1.sh |
Ejecutar un script de lunes a viernes a las 2:30 horas:
30 2 * * 1-5 /home/usertest/scripts/test1.sh |
Ejecutar un script de lunes a viernes cada 10 minutos desde las 2:00 horas durante una hora:
0,10,20,30,40,50 2 * * 1-5 /home/usertest/scripts/test1.sh # ó */10 2 * * 1-5 /home/usertest/scripts/test1.sh |
Enviará un correo todos los días a las 8:00 a.m. y 8:00 p.m.
0 8,20 * * * usertest mail -s "sistema funcionando" usertest@dominio.com |
Podemos usar cualquier otro programa ejecutable, ejemplos:
*/15 * * * * /usr/bin/curl http://dominio.com/test1.php > /dev/null 2>&1 */15 * * * * /usr/bin/curl -u usertest:password http://dominio.com/test1.php */15 * * * * wget -q -O http://dominio.com/test1.php */15 * * * * /usr/bin/php /home/usertest/scripts/test1.php > /dev/null 2>&1 |
Cadenas especiales
@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 * * * *
@hourly usertest /home/usertest/scripts/test1.sh @monthly usertest /home/usertest/scripts/test1.sh @daily root apt-get update && apt-get -y upgrade |