.
Crontab
El crontab (cron deriva de Cronos, en griego que significa "tiempo") de comandos, que se encuentra en sistemas operativos Unix, se utiliza para programar la ejecución de comandos de forma periódica.
Para ver los crontabs que se están ejecutando actualmente en su sistema, puede abrir un terminal y ejecutar:
crontab -l
Para editar la lista de cronjobs puede ejecutar:crontab -e
Se abre con el editor por defecto el podría ser vi, nano o pico. Para cambiar el editor de crontab por defecto es necesario exportar la variable de ambiente EDITOR:
#su
passwd:
#export EDITOR="nano"
o
#export EDITOR="vi"
Con el comando anterior cambiamos el editor de crontab, nuevamente volvermos agregar tareas en crontab, se guarde y sale del editor. Los cronjobs se escriben en el siguiente formato:
* * * * * /bin/execute/this/script.sh
Como puedes ver hay 5 estrellas. Las estrellas representan las diferentes partes de fecha en el siguiente orden:
minutos: (de 0 a 59)
horas: (de 0 a 23)
día del mes: (del 1 al 31)
mes: (de 1 a 12)
días de semana: (de 0 a 6) (0 = domingo)
Ejecutar cada minuto
Si deja el asterisco significa cada minuto. Tal vez es un poco confuso. Vamos a usar el ejemplo siguiente:
Si deja el asterisco significa cada minuto. Tal vez es un poco confuso. Vamos a usar el ejemplo siguiente:
* * * * * /home/usuario/script.sh
Todos ellos son todavía asteriscos! Así que esto significa ejecutar /home/usuario/script.sh:
cada minuto
de cada hora
de cada día del mes
de cada mes
y todos los días de la semana.
En resumen: Este script se ejecuta cada minuto. Sin excepción.
de cada hora
de cada día del mes
de cada mes
y todos los días de la semana.
En resumen: Este script se ejecuta cada minuto. Sin excepción.
Ejecutar cada Viernes a las 1 AM
Así que si desea programar la secuencia de comandos para ejecutar todos los viernes a la 1AM, necesitaríamos el cronjob siguiente:
¿Lo entiendes? Esta tarea se ejecutara cuando el reloj del sistema marque:
minuto: 0
de hora: 1
de días del mes: * (todos los días del mes)
del mes: * (cada mes)
y día de la semana: 5 (= Viernes)
Así que si desea programar la secuencia de comandos para ejecutar todos los viernes a la 1AM, necesitaríamos el cronjob siguiente:
0 1 * * 5 /home/usuario/script.sh
¿Lo entiendes? Esta tarea se ejecutara cuando el reloj del sistema marque:
minuto: 0
de hora: 1
de días del mes: * (todos los días del mes)
del mes: * (cada mes)
y día de la semana: 5 (= Viernes)
Ejecutar los días laborables a las 1 a.m.
Si queremos programar una tarea en el crontab que se ejecute de lunes a viernes y a las 1 am, necesitaríamos editar el siguiente cronjob:
0 1 * * 1-5 /home/usuario/script.sh
Lo entiendes? La Tarea está siendo ejecutada cuando el reloj del sistema marca:
el minuto: 0
de hora: 1
de días del mes: * (todos los días del mes)
del mes: * (cada mes)
y día de la semana: 1-5 (= lunes hasta viernes)
de hora: 1
de días del mes: * (todos los días del mes)
del mes: * (cada mes)
y día de la semana: 1-5 (= lunes hasta viernes)
Ejecutar una tarea pasado 10 min después de cada hora y el día 1 de cada mes
10 * 1 * * /home/usuario/script.sh
Trucos en el crontab
¿Qué pasa si te gustaría ejecutar algo cada 10 minutos? Así que usted puede hacer esto:
Pero crontab le permite hacer esto también:
¿Qué pasa si te gustaría ejecutar algo cada 10 minutos? Así que usted puede hacer esto:
0,10,20,30,40,50 * * * * /home/usuario/script.sh
Pero crontab le permite hacer esto también:
*/10 * * * * /home/usuario/script.sh
Palabras especiales en crontab
En crontab también se puede usar palabras clave en lugar de número:
En crontab también se puede usar palabras clave en lugar de número:
- @reboot Ejecutar una vez en el arranque
- @yearly Ejecutar anual una vez al año "0 0 1 1 *"
- @annually Lo mismo que (@yearl)
- @monthly Ejecutar una vez al mes "0 0 1 * *"
- @weekly Ejecutar una vez por semana "0 0 * * 0"
- @daily Ejecutar una vez al dia "0 0 * * *"
- @midnight Lo mismo de (@daily)
- @hourly Ejecutar una vez a la hora "0 * * * *"
Deje el resto de los campos vacíos para que pueda ser válida, ejemplo:
@daily /home/usuario/script.sh
Almacenamiento de la salida de crontab
Cron puede guarda la salida de /home/usuario/script.sh en el buzón del usuario (root en este caso). Pero es más bonito si la salida se guarda en un archivo de registro separado. He aquí cómo:
*/10 * * * * /home/usuario/script.sh >> /var/log/script_output.log 2>&1
Linux puede informar acerca de los diferentes niveles. No hay salida estándar (stdout) y error estándar (stderr). STDOUT está marcado 1, STDERR se marca 2. Así que la siguiente declaración le dice a Linux para almacenar STDERR en STDOUT, así, la creación de un flujo de datos de los mensajes y errores:
2>&1
Ahora que tenemos un flujo de salida, se puede almacenar en un archivo.
Dónde:
> sobrescribirá el archivo.
>> anexará al expediente.
En este caso nos gustaría anexar:
>> /var/log/script_output.log
Enviar por correo la salida de crontab
Cron guarda la salida en el buzón del usuario (root en este caso) del sistema local, pero también se puede configurar para reenviar todo el crontab a una dirección de correo electrónico:
MAILTO = "yourname@yourdomain.com"
Enviar por correo la salida de crontab de un solo cronjob
Si prefiere recibir la salida de una sola tarea programada en su correo, asegúrese de que el paquete está instalado:
Instalar msmtp, ver link
apt-get install msmtp ca-certificatesLuego de instalado cambiar el cronjob así:
*/10 * * * * /home/usuario/script.sh 2>&1 | mutt -s "Cronjob ouput" yourname@yourdomain.com
o
*/10 * * * * mutt -s "prueba desde la consola" yourname@yourdomain.com </var/log/auth.log
Enviar la salida de crontab a null
Eso es fácil:
*/10 * * * * /home/usuario/script.sh > /dev/null 2>&1
/dev/null es un archivo especial que descarta todos los datos escritos en ella.Deshabilitar Crontab
Para borrar todas las tareas en cron solo necesita aplicar este comando:
Crontab -r
Espero que les sirve estas informacion.
No hay comentarios:
Publicar un comentario