crontab (tareas automatizadas)

66.jpgExiste una herramienta que nos puede ser de gran utilidad a la hora de automatizar tareas, dicha herramienta se llama cron.
El paquete cron viene en todas las distribuciones tanto de Linux como de *BSD. (vixie_cron)
Un administrador del sistema puede utilizar las tareas automáticas para realizar copias de seguridad periódicas, controlar el sistema y ejecutar scripts personalizados, entre otras tareas.Para asegurarnos de que cron está en funcionamiento activaremos en daemon (debian):

orion root # /etc/init.d/cron start
Starting periodic command scheduler: cron.

Ahora nos logamos como el usuario que necesitemos.

# su - usuario

Luego ejectuamos el comando crontab con el parametro -e (edit)

# crontab -e


El formato que debe tener el fichero es el siguiente:

minute hour day month dayofweek command

minute — número entero entre 0 y 59

hour — número entero entre 0 y 23

day — número entero entre 1 y 31 (debe ser un día válido si se especifica un mes)

month — número entero entre 1 y 12 (o nombre corto del mes, por ejemplo, ene, feb, etc.)

dayofweek — número entero entre 0 y 7, donde 0 o 7 corresponde a Domingo (o el nombre corto del día de la semana, por ejemplo, dom, lun, etc.)

command — el comando a ejecutar (el comando puede ser uno tal como ls /proc >> /tmp/proc o el comando para ejecutar un script personalizado que usted haya escrito.)

En cualquiera de los valores antes indicados, se puede utilizar un asterisco (*) para especificar todos los valores válidos. Por ejemplo, un asterisco para el valor de mes significa que el comando se ejecutará cada mes dentro de las limitaciones del resto de los valores.

Un guión (_) entre los números enteros indica un intervalo de números enteros. Por ejemplo, 1_4 significa los números enteros 1, 2, 3 y 4.

Una lista de valores separados por comas (,) especifica una lista. Por ejemplo, 3, 4, 6, 8 indica esos cuatro números enteros.

La barra (/) puede utilizarse para especificar valores de pasos. El valor de un número entero se puede omitir dentro de un intervalo si se indica a continuación del intervalo lo siguiente /. Por ejemplo, 0_59/2 puede usarse para definir el resto de los minutos del campo minuto. Los valores de pasos también pueden utilizarse con un asterisco. Por ejemplo, el valor */3 puede usarse en el campo de mes para omitir el tercer mes.

Las líneas que empiezan por almohadilla (#) son comentarios y no se procesan.

Imaginemos que deseamos hacer un ping entre servidores cada 30 minutos.

# crontab -e
*/30 * * * * /bin/ping -t4 192.168.1.10

Otro ejemplo:
Queremos que cada noche a las 2:00 de la mañana nos acrtualice, en el caso de gentoo el portage, en el caso de *BSD los ports.

# crontab -e
0 2 * * * root /path/script

Nótese que se pone la ruta completa hasta el archivo binario de la aplicación, si no se sabe cual es mediante, # whereis aplicación, nos lista en la cónsola cual es.


Anexo:

Si deseáramos enviarnos un correo con un determinado log, la forma sería poniéndolo en un script, por ejemplo:

#!/bin/sh
/bin/cat /proc/meminfo | /usr/sbin/sendmail [email protected]

Lo guardamos como floodea.sh y lo llamamos en cron:

# crontab -e
3 0 * * * * /root/floodea.sh

(Esto es, enviarnos un e-mail cada minuto 30 de cada hora.)
Si ejecutáramos esto mismo en cron:

# crontab -e
30 * * * * cat /proc/meminfo | /usr/sbin/senmail [email protected]

No nos funcionará. Otra forma de enviarnos por correo todas las salidas de el script que se ejecuta dentro de un cron sería poniendo, [email protected] al principio, es decir:

# crontab -e
[email protected]
30 * * * * /root/floodea.sh

cuando floodea.sh contiene sólo:

cat /proc/meminfo

Leave a Reply

Your email address will not be published.