[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] Problema raro, raro... en shell script



On Tue, Sep 10, 2013 at 12:15:53PM +0200, Alfonso Camacho wrote:
> Saludos:
> 
> Estoy currando en un script alojado en un servidor Debian Squeeze cuya misión es capturar información de uso de disco y volumenes de servidores Windows y cabinas NetApp mediante SNMP (se usan checks de Nagios para lanzar estas consultas).
> 
> El problemas es que como la red de la cual obtener estos datos es bastante grande se tiene que lanzar de manera recursiva para todos los hosts, unidades y volumenes que hay definidos en varios ficheros de configuración, para lo cual se ha creado una rutina for para cada check:
> 
> 
> # ------------- DECLARACION DE VARIABLES -------------
> PATHBASE="/usr/local/bin/reports/capacitat"
> TMPBASE="$PATHBASE/tmp"
> INCBASE="$PATHBASE/incoming"
> CONFBASE="$PATHBASE/etc"
> VOLCONF=`cat $CONFBASE/volumes.conf`
> EXCLUDECONF="$CONFBASE/exclude.conf"
> STORAGEWINBIN="$PATHBASE/bin/check_snmp_storage.pl"
> STORAGENETAPPBIN="$PATHBASE/bin/check_netapp_du.pl"
> HOSTBIN="$PATHBASE/bin/dynhosts/run.sh"
> SNMP="LT1"
> WARN_LEVEL="80"
> CRIT_LEVEL="95"
> 
> 
> ##########################################################
> ## Extraccion y generacion de reports servidores Windows #
> ##########################################################
> 
> # Comprobacion de la existencia de fichero de configuracion 'hosts.conf'.
> if [[ -s $CONFBASE/hosts-win_$DATE.conf ]] ; then
>         echo "OK. Fichero de configuracion 'hosts-win_$DATE.conf' encontrado"
> else
>         $HOSTBIN
>         HOSTSWIN=`cat $CONFBASE/hosts-win_$DATE.conf`
> fi
> 
> # Creacion de reports temporales por volumen
> for MULTIHOSTSWIN in $HOSTSWIN
> do
>         $STORAGEWINBIN -H $MULTIHOSTSWIN -C $SNMP -w $WARN_LEVEL -c $CRIT_LEVEL -m ^[C]: | cut -f4 -d ':' | xargs echo $MULTIHOSTSWIN:C: >> $TMPBASE/c.txt
>         $STORAGEWINBIN -H $MULTIHOSTSWIN -C $SNMP -w $WARN_LEVEL -c $CRIT_LEVEL -m ^[D]: | cut -f4 -d ':' | xargs echo $MULTIHOSTSWIN:D: >> $TMPBASE/d.txt
>         $STORAGEWINBIN -H $MULTIHOSTSWIN -C $SNMP -w $WARN_LEVEL -c $CRIT_LEVEL -m ^[E]: | cut -f4 -d ':' | xargs echo $MULTIHOSTSWIN:E: >> $TMPBASE/e.txt
>         $STORAGEWINBIN -H $MULTIHOSTSWIN -C $SNMP -w $WARN_LEVEL -c $CRIT_LEVEL -m ^[F]: | cut -f4 -d ':' | xargs echo $MULTIHOSTSWIN:F: >> $TMPBASE/f.txt
>         $STORAGEWINBIN -H $MULTIHOSTSWIN -C $SNMP -w $WARN_LEVEL -c $CRIT_LEVEL -m ^[G]: | cut -f4 -d ':' | xargs echo $MULTIHOSTSWIN:G: >> $TMPBASE/g.txt
>         $STORAGEWINBIN -H $MULTIHOSTSWIN -C $SNMP -w $WARN_LEVEL -c $CRIT_LEVEL -m ^[H]: | cut -f4 -d ':' | xargs echo $MULTIHOSTSWIN:H: >> $TMPBASE/h.txt
>         $STORAGEWINBIN -H $MULTIHOSTSWIN -C $SNMP -w $WARN_LEVEL -c $CRIT_LEVEL -m ^[I]: | cut -f4 -d ':' | xargs echo $MULTIHOSTSWIN:I: >> $TMPBASE/i.txt
> done
> 
> 
> ######################################################
> ## Extraccion y generacion de reports cabinas NetApp #
> ######################################################
> 
> # Comprobacion de la existencia de fichero de configuracion 'hosts.conf'.
> if [[ -s $CONFBASE/hosts-netapp_$DATE.conf ]] ; then
>         echo "OK. Fichero de configuracion 'hosts-netapp_$DATE.conf' encontrado"
> else
>         $HOSTBIN
>         HOSTSNETAPP=`cat $CONFBASE/hosts-netapp_$DATE.conf`
> fi
> 
> # Creacion de reports temporales por volumen
> for MULTIHOSTSNETAPP in $HOSTSNETAPP ; do for MULTIVOLNETAPP in $VOLCONF
> do
>        $STORAGENETAPPBIN -H $MULTIHOSTSNETAPP -w $WARN_LEVEL -c $CRIT_LEVEL -v $MULTIVOLNETAPP | xargs echo $MULTIHOSTSNETAPP : >> $TMPBASE/netapp.txt
>         done
> done
> 
> Lo raro del caso es que solo se ejecuta el primer for que encuentra en el script, pasando de ejecutar el que encuentra en segundo lugar. Incluso se partido el script en scripts independientes haciendo las llamadas desde el script principal y el comportamiento es el mismo.
> 
> Alguna idea o sugerencia? Alguien ve lo que estoy haciendo mal?
> 
> Muchas gracias.
> 
> 

El segundo for no lleva el punto y coma. Ahora no puedo mirarlo con
más detalle, pero bash tiene peculiaridades de este estilo.

Mira tambien de ejecutarlo con sh -x o bien poniendo echos a modo de
depuración para saber el recorrido de la rutina.
-- 
Adrià García-Alzórriz
adria@fsfe.org
GPG Key: 09494C14

Cada situación es el mejor axioma para progresar en el camino.
		-- Kalfried Durkhei. 

Attachment: signature.asc
Description: Digital signature


Reply to: