Archive for the ‘Linux’ Category

En Ubuntu, cron es el “Administrador de tareas” en segundo plano (demonio) que ejecuta programas a intervalos regulares (por ejemplo, cada minuto, día, semana o mes). Los procesos que deben ejecutarse y la hora en la que deben hacerlo se especifican en el archivo crontab.

Los usuarios habilitados para crear su archivo crontab se especifican en el archivo cron.allow. De manera análoga, los que no lo tienen permitido figuran en /etc/cron.d/cron.deny, o /etc/cron.deny, dependiendo de la versión de unix.

Cómo programar una tarea en crontab

Nada mejor que un ejemplo del archivo crontab

skrdz@root:#crontab -e
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01  * * * * root nice -n 19 run-parts /etc/cron.hourly
50  0 * * * root nice -n 19 run-parts /etc/cron.daily
22 4 * * 0 root nice -n 19 run-parts /etc/cron.weekly
42 4 1 * * root nice -n 19 run-parts /etc/cron.monthly

Para agregar, quitar o modificar tareas, hay que editar el crontab. Esto se hace con la orden crontab -e, que abrirá el editor definido en la variable de entorno EDITOR y cargará el archivo crontab correspondiente al usuario que está logueado.

Cada vez que se ejecuta el crontab, se envía un mail al usuario que aparece en la variable de entorno MAILTO, si está habilitado, indicándole la tarea realizada.

La sintaxis en sí…

El símbolo Numeral “#” es un comentario, todo lo que se encuentre después de ese carácter no será ejecutado por cron. El momento de ejecución se especifica de acuerdo con la siguiente tabla:

Minutos: (0-59)
Horas: (0-23)
Días: (1-31)
Mes: (1-12)
Día de la semana: (0-6), siendo 1=Lunes, 2=Martes, … 6=sábado y 0=Domingo
Para especificar todos los valores posibles de una variable se utiliza un asterisco (*).
La última columna corresponde al path absoluto del binario o script que se quiere ejecutar.

Por ejemplo:

24 12 * * 1 /usr/bin/who >> /home/hola.txt
Ejecuta la orden who todos los lunes a las 12:24 y guarda la salida en el archivo hola.txt

Para especificar dos o más valores en cada variable, estas deben estar separadas por comas, siguiendo con el ejemplo anterior:

0,24 * * * 1 /usr/bin/who >> /home/hola.txt

Ejecuta la orden who todos los lunes cada media hora y guarda la salida en el archivo hola.txt

Si queremos que se ejecute cada 15 minutos sería:

0,15,30,45 * * * * /usr/bin/who >> /home/quien.tex
ó
*/15 * * * * /usr/bin/who >> /home/quien.tex
En este ejemplo veremos como pasarle mas de un comando al cron y de paso como puede programarse una descarga:

30 21 * * * cd /media/sda7/dexter/distributions/isos;wget http://hola.com/archivo_a_descargar.loquesea

Este otro es para programar el apagado de la PC. En este caso todos los sábados a las 9:30 pm.

30 21 * * 6 /sbin/shutdown -h now

Espero que les haya servido!!! A mi me sirvió para programarle a moodle correr el script necesario para que envíe los correos de los foros o información importante a los estudiantes.

Vía: http://skrdz.wordpress.com/2007/08/31/programador-de-tareas-en-ubuntu-cron/

Una solución de mantener limpia la cola de exim, sobre todo cuando mueve cantidades ingentes de correo puede ser la inclusión en crontab de este pequeño script:

#!/bin/sh

/usr/sbin/exim -bpr | grep frozen | awk {'print $3'} | xargs /usr/sbin/exim -Mrm

Aunque a veces se nos quedan correos que están ‘mal formados’ para ello tira directamente del spool.

# cd /var/spool/exim/
# rm */message-id*

TIP para con una linea sóla actualizar todas las bbdd de MySQL del server.

mysqlcheck -uda_admin -p -ro --all-databases

Un pequeño tip para saber que cargas ha tenido la SWAP de forma que podamos hacernos una idea de cómo está de sana la máquina.

root@elserver [~]# sar -qrB -t 1400  -f /var/log/sa/sa02 | tail -n35
Average:       474251   1600573     77.14    130909    803944   2040212         0      0.00         0

12:30:01 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15
12:50:02 PM         2       169      0.34      0.57      0.54
01:20:01 PM         2       193      0.87      0.80      0.67
01:40:01 PM         3       189      0.94      1.15      0.88
02:00:01 PM         4       186      0.78      1.14      1.04
02:30:01 PM         6       267      0.88      0.79      0.91
02:50:01 PM         4       170      0.53      0.64      0.81
03:10:01 PM         3       188      1.00      1.00      0.92
03:40:01 PM         3       187      1.38      1.21      1.05
04:00:01 PM         7       193      1.90      1.49      1.15
04:20:01 PM         2       179      1.13      0.97      0.99
04:50:01 PM         3       176      1.02      1.36      1.19
05:10:02 PM         7       209      1.00      0.91      0.99
05:30:01 PM         6       185      0.41      0.46      0.67
06:00:01 PM         7       182      0.75      0.59      0.56
06:20:01 PM         3       202      0.40      0.48      0.54
06:40:01 PM         3       204      0.89      0.84      0.68
07:10:01 PM         3       189      0.32      0.37      0.44
07:30:01 PM         5       194      1.09      1.06      0.79
07:50:01 PM         4       183      0.54      0.77      0.77
08:20:01 PM         3       162      0.24      0.32      0.42
08:40:01 PM         4       172      0.21      0.38      0.42
09:00:01 PM         5       170      0.25      0.34      0.38
09:30:01 PM         5       164      0.29      0.30      0.33

09:30:01 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15
09:50:01 PM         2       176      1.20      0.74      0.59
10:10:01 PM         3       169      1.13      0.73      0.60
10:40:01 PM         3       171      0.29      0.43      0.51
11:00:02 PM         5       201      0.82      1.04      0.85
11:20:01 PM         2       192      0.67      0.70      0.75
11:50:01 PM         2       184      0.40      0.79      0.78
Average:            4       186      0.75      0.77      0.73

Un pequeño apunte para sacar datos de /var/log/secure

En este caso un listado de ataques a uno de los servidores.

root@elserver [~]#  cat /var/log/secure | grep Failed | cut -d: -f7 | cut -d' ' -f1 | sort| uniq -c
 8 148.228.20.240
 5 190.196.23.163
 8 200.164.76.166
 8 200.234.201.121
 12 202.103.25.132
 6 61.37.158.250
 11 77.51.250.130
 3 80.108.210.147

root@elserver [~]#  netstat -np | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | awk '{if ($1>2){print $0}}'
 49
 16 127.0.0.1
 19 DGRAM
 70 STREAM

Con esta sencilla instrucción puedes garantizar la continuidad de la bajada de un archivo en caso de que se corte por cualquier eventualidad.

# curl -C – -O  http://mirrors.kernel.org/opensuse/distribution/10.3/iso/dvd/openSUSE-10.3-GM-DVD-i386.iso

ソルサン。

Pues depende :)

wget es muy potente pero a veces con una sencilla instrucción de curl puedes incluso generar un twitt desde la cónsola.

Aquí dos ejemplos de lo mismo.

Si estás en un Mac, tendrás que bjarte des los ports wget.

# wget http://www.some-site-or-other.org/files/isos/big.iso

# curl -O http://www.some-site-or-other.org/files/isos/big.iso

Slàn!