sudo: Jack of all trades, master of some

Kill mirroring

6 comentarios

Actualmente sincronizo los mirrors de repositorios y otros archivos necesarios diariamente a través de varias tareas de crontab. Estas tareas ejecutan scripts que descargan los archivos a través de rsync, wget, lftp o debmirror en dependencia, siempre en el horario de la madrugada que no hay actividad en la red de los usuarios. Para evitarme tener que todos los días por la mañana detener todas las descargas, utilizo este script que lo hace automáticamente. Espero que les sea útil como a mí y si se puede mejorar, mucho mejor.

#!/bin/bash

PROCESOS="rsync wget lftp debmirror"

for PROCESO in ${PROCESOS}
do
        while [ -n "`pidof -x ${PROCESO}`" ]
        do
                pkill ${PROCESO}
                sleep 2s
        done
done

exit 0

Dentro de un bucle infinito se comprueba si existe alguno de los procesos definidos en la variable PROCESOS y si es verdadera la comprobación termina el proceso en cuestión. El caso especial de sleep es para los scripts que usen rsync, de manera que pueda haber un intervalo para poder terminar todos los procesos que pueda crear el script. Es importante especificar la opción -x del comando pidof para poder obtener el PID de los procesos cuando se ejecuten desde un script.

Comentarios desactivados
  1. Que pasa si llegas por la mañana o a la hora que decidas y no existe ninguno de estos procesos o sea.. si el
    while [ -n "`pidof -x ${PROCESO}`" ]

    Devuelve un 0 o un “false” en este caso no veo nada en el script que intente hacer el debido tratamiento de las excepciones pero no obstante… me gusta la tonica para poder usar este script (puesto en crontab quizas a las 8 am que es cuando comienza mas o menos a llegar la gente al trabajo) aunque habria que ver que tan sobrecarga ese lazo infinito

    1. @neji

      El script lo uso con crontab, se ejecuta a las 7:40 a.m., claro, para hacerlo automático completamente. Simplemente si la comprobación de la existencia del proceso devuelve nulo entonces no hace nada el while y comienza el otro ciclo, el ciclo de detiene cuando llega al último nombre del proceso. No creo que el script use tantos recursos, de todos modos, como decía en la entrada, si se puede mejorar sería lo ideal, no soy experto en programación ni pretendo serlo, solo complicarme menos la vida. ;)

      1. @oneohthree

        Una sugerencia si lo que quieres es terminar todas las descargas utiliza killall -9 proceso Ej: killall -9 wget mata todos los procesos del wget y te quitas los ciclos o sea solamente seria
        killall -9 rsync | killall -9 wget | killall -9 lftp | killall -9 debmirror
        los | son para que los ejecute al mismo tiempo por k si pones ; en caso de que no exista uno los demas no se ejecutan. Saludos y buen blog

        1. @Nesty

          Gracias por las sugerencias. Este script tiene sus peculiaridades. En mi caso, varios de los script comienzan otro proceso de rsync, por ejemplo, de ahí la necesidad de comprobar en un ciclo si existen o no los procesos. De todos modos, te reitero las gracias por el comentario.

          Saludos

  2. Colega me inicie recientemente como admin de redes, aunque realmente soy graduado en Derecho, ya instale mi server en Linux con el Debian Squeeze , he intentado por todos las vias las dichosas descargas automaticas y no me salen, necesito que me expliques por favor, paso a paso y bien clarito como hago o que se debe cumplir en las configuraciones del sistema para que estos script funcionen. Disculpa las molestias compadre pero para aprender hay que aclarar las dudas. Visita mi blog y opina.. Sigue asi con este blog, esta buenisimo…

    salu2

    1. @DRLicea

      Realmente tienes que decirme con exactitud qué es lo que quieres.