Ingresar  \/ 
x
 Use Facebook account  Use Google account  Use Microsoft account  Use LinkedIn account
o
x

Programar Tareas en Linux Usando Crontab

programar tareas en linux usando crontab

Programar Tareas en Linux Usando Crontab. Hoy voy a enseñarles a usar una herramienta muy útil, llamada Cron, que sirve para programar y automatizar tareas en Linux. Hay que saber aprovechar este tipo de funciones que nos ofrece. Si queremos, por ejemplo, que cada hora se ejecute un script, o un archivo PHP, o cualquier cosa que queramos, pues no vamos a meternos 24 veces al día para ejecutarlo manualmente. No tiene sentido. Para esto está Cron.

Sobre CRONTAB

El comando crontab se utiliza en sistemas UNIX para programar la ejecución de otros comandos, es decir, para automatizar tareas. Podemos ver los crontabs que se están programados y también editarlos, lógicamente.

Para verlos, utilizamos este comando:

$ sudo crontab -l

Para editar la lista de cronjobs que puede ejecutar:

$ sudo crontab -e

FORMATO DE LAS TAREAS

Las tareas cron siguen una determinada sintaxis. Tienen 5 asteriscos seguidos del comando a ejecutar. Ahora explicaré para qué sirve cada cosa.

* * * * * /bin/execute/this/script.sh

Los 5 asteriscos

De izquierda a derecha, los asteriscos representan:

  • Minutos: de 0 a 59.
  • Horas: de 0 a 23.
  • Día del mes: de 1 a 31.
  • Mes: de 1 a 12.

Día de la semana: de 0 a 6, siendo 0 el domingo.

Si se deja un asterisco, quiere decir "cada" minuto, hora, día de mes, mes o día de la semana. Por ejemplo:

* * * * * /bin/ejecutar/script.sh

 

Ejecuta este script:

  • Cada minuto
  • De cada hora
  • De cada día del mes
  • De cada mes
  • De cada día de la semana

 

Otro ejemplo:

30 2 * * 1 /bin/ejecutar/script.sh

Ejecutar este script:

  • En el minuto 30
  • De las 2 de la noche
  • De cada día del mes
  • De cada mes
  • Sólo si es viernes

En resumen, todos los viernes a las 2:30 horas se ejecutará el script.

 

Intervalos de tiempo

Ejecutar un script de lunes a viernes a las 2:30 horas:

0,10,20,30,40,50 * * * * /bin/execute/this/script.sh

Pero Crontab le permite hacer esto también:

*/10 * * * * /bin/execute/this/script.sh

Lo cual hará exactamente lo mismo. ¿Puedes hacer las matemáticas? ; )

Palabras especiales

Para el primer campo (minuto), también puede poner una palabra clave en lugar de un número:

@reboot     Run once, at startup
@yearly     Run once  a year     "0 0 1 1 *"
@annually   (same as  @yearly)
@monthly    Run once  a month    "0 0 1 * *"
@weekly     Run once  a week     "0 0 * * 0"
@daily      Run once  a day      "0 0 * * *"
@midnight   (same as  @daily)
@hourly     Run once  an hour    "0 * * * *"

Dejando el resto de los campos vacíos, esto sería válido:

@daily /bin/execute/this/script.sh

Almacenamiento de la salida de crontab

De forma predeterminada, cron guarda la salida de /bin/execute/this/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. Así es cómo:

*/10 * * * * /bin/execute/this/script.sh >> /var/log/script_output.log 2>&1

Mayor información

Linux puede informar en diferentes niveles. Hay salida estándar (STDOUT) y errores estándar (STDERR). STDOUT está marcado 1, STDERR está marcado 2. Así que la siguiente declaración le dice a Linux que almacene STDERR en STDOUT también, creando un flujo de datos para mensajes y errores:

2>&1

Ahora que tenemos 1 flujo de salida, podemos verterlo en un archivo. Donde > sobreescribirá el archivo, >> agregará al archivo. En este caso, nos gustaría agregar:

>> /var/log/script_output.log

Envío por correo de la salida de crontab

De forma predeterminada, cron guarda la salida en el buzón del usuario (root en este caso) en el sistema local. Pero también puede configurar crontab para reenviar todos los resultados a una dirección de correo electrónico real al iniciar su crontab con la siguiente línea:

MAILTO="Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo."

Enviar por correo la salida de crontab de solo un cronjob

Si prefiere recibir solo una salida de cronjob en su correo, asegúrese de que este paquete esté instalado:

$ aptitude install mailx

Y cambie el cronjob así:

*/10 * * * * /bin/execute/this/script.sh 2>&1 | mail -s "Cronjob ouput" Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.

Trasladar la salida de crontab

Ahora que es fácil:

*/10 * * * * /bin/execute/this/script.sh > /dev/null 2>&1

Simplemente canalice toda la salida al dispositivo nulo, también conocido como agujero negro. En sistemas operativos tipo Unix, /dev/null es un archivo especial que descarta todos los datos escritos en él.

Advertencias

Muchos scripts se prueban en un entorno Bash con la variable PATH configurada. De esta manera, es posible que las secuencias de comandos funcionen en su caparazón, pero cuando se ejecuta desde cron (donde la variable PATH es diferente), la secuencia de comandos no puede encontrar ejecutables referenciados y falla.

No es tarea del script establecer PATH , es responsabilidad de la persona que llama, por lo que puede ayudar a echo $PATH y colocar PATH=<the result> en la parte superior de los archivos cron (justo debajo de MAILTO ).

Futente. Artículo tradicido con muy ligeras modificaciones de: http://kvz.io/blog/2007/07/29/schedule-tasks-on-linux-using-crontab/

Sobre el Autor
Pipe Peña
Author: Pipe Peña
Soy un loco enamorado de la vida. Licenciado en Ciencias Sociales y Humanas, amante de la informática y la astrofísica. Me gusta crear e investigar proyectos que enriquezcan la construcción y desarrollo del conocimiento individual y colectivo. Me encantan los videojuegos, el cine, la química, matemáticas, la física cuántica y la música, en donde actualmente soy compositor. Me baso en la idea que toma Baruch Spinoza sobre Dios.

ImprimirCorreo electrónico

Donaciones - Tutoriales y VideoTutoriales Fututel

Dona si crees que lo merecemos. Ésto nos ayudará para seguir publicando y hacerte la vida más fácil :)

Cantidad: