# nfs netmount y unas consultas

## pelelademadera

bueno, me gustaria saber si se puede hacer lo siguiente, en realidad seguro que se puede, pero me gustaria saber como...

bueno, la cuestion es asi:

me gustaria modificar el script de netmount para que si: hago ping a una determinada ip y me da "error" o que no encuentra el host, se detenga, de esa manera evitarme esperar el tiempo hasta que dice timeout

lo mismo para desmontarlo.

alguien me sabria decir que reporta ping?

digamos, hacer una bucle que sea:

if ping IP

y sino que no se cargue

muchas gracias

----------

## cohone

Con la opción "-c count" (ver man) te hace el ping todas las veces que quieras. Ej "ping -c 2 192.168.1.1"

Y... supongo que el retorno es como todos, 0 si es correcto y !=0 si da error, miralo tu mismo "echo $?"

Puedes usar también el comando arping, que creo que es más rápido

----------

## agdg

Tan solo debes de copiar y pegar en una consola, e ir probando hasta a adaptarlo a tus necesidades. Cuando ya lo tengas listo, pásalo al script de inicio de netmount.

```
agd-server ~ # IP=192.168.1.1

agd-server ~ # arping -fw 1 $IP 2>&1 1>/dev/null ; if [[ $? = 0 ]] ; then echo "PC ON" ; else echo "PC OFF" ; fi

PC ON

agd-server ~ # IP=192.168.1.156

agd-server ~ # arping -fw 1 $IP 2>&1 1>/dev/null ; if [[ $? = 0 ]] ; then echo "PC ON" ; else echo "PC OFF" ; fi

PC OFF

agd-server ~ #
```

Y como decía cohone, arping es mucho más rápido que ping; según mis pruebas aproximadamente el doble. Pero para lo que quieres usarlo, si se usa la opción -w de arping, la velocidad mejora aun más (OJO, los errores son debidos a que estamos pasando comandos a time a través de echo y obivamente time no reconoce el "comando" PC OFF):

```
agd-server ~ # time $(ping -fc 5 $IP 2>&1 1>/dev/null ; if [[ $? = 0 ]] ; then echo "PC ON" ; else echo "PC OFF" ; fi)

-bash: PC: command not found

real   0m10.050s

user   0m0.010s

sys   0m0.000s

agd-server ~ # time $(arping -fc 5 $IP 2>&1 1>/dev/null ; if [[ $? = 0 ]] ; then echo "PC ON" ; else echo "PC OFF" ; fi)

-bash: PC: command not found

real   0m5.080s

user   0m0.000s

sys   0m0.000s

agd-server ~ # time $(arping -fw 1 $IP 2>&1 1>/dev/null ; if [[ $? = 0 ]] ; then echo "PC ON" ; else echo "PC OFF" ; fi)

-bash: PC: command not found

real   0m2.060s

user   0m0.000s

sys   0m0.000s

agd-server ~ # 
```

Si crees que -w 1 es muy agresivo y no da tiempo para que lleguen las respuestas, usa -w 2. Al final, esto se reduce al prueba y error.

----------

## pelelademadera

pruebo eso y comento como me fue

creo que le puede ser de utilidad a mas de uno que tenga un server pero no fijo...

----------

## hashashin

Puedes usar autofs, que monta/desmonta por demanda entre otras cosillas.

Salud.

----------

## agdg

He ojeado el script de inicio netmount; y tal y como presente el script en el post anterior, está bastante incompleto. Al parecer netmount recibe una lista de ip como parámetros (variable $rcfilesystems), por tanto debemos crear un bucle que saque y compruebe cada IP.

Te dejo con un script que puede ser integrado en netmount:

```
#!/bin/bash

rcfilesystems="192.168.1.1 192.168.1.10 192.168.1.20 192.168.1.21 192.168.1.22 192.168.1.120 192.168.1.128"

rcfilesystems=${rcfilesystems// /,}   # convert to comma-separated

ips=1 #check ip numbers to mount

while true ; do

        rcfscheck=$(echo $rcfilesystems | cut -d "," -f $ips) #Extract ip

        let ips++

        if [ $rcfscheck ] ; then #ip chechking

                ping -c 1 $rcfscheck 2>&1 1>/dev/null

                if [[ $? = 0 ]] ; then rcfsup="$rcfsup,$rcfscheck" ; fi #Creating a new variable. Only contains IP powered PC.

        else break

        fi

done

echo "Analizadas todas las ip, los PC ON son:"

rcfsup=$(echo $rcfsup | cut -d "," -f 2-) #Removing the first comma

echo $rcfsup #Printing :-)

```

En mi caso al ejecutar el script elimino las ip que no forman parte de mi red: 192.168.1.22 y 192.168.1.128

```
agd-desktop Prog # ./pelelademadera.sh 

Analizadas todas las ip, los PC ON son:

192.168.1.1,192.168.1.10,192.168.1.20,192.168.1.21,192.168.1.120

agd-desktop Prog # 
```

----------

## agdg

He ojeado el script de inicio netmount; y tal y como presente el script en el post anterior, está bastante incompleto. Al parecer netmount recibe una lista de ip como parámetros (variable $rcfilesystems), por tanto debemos crear un bucle que saque y compruebe cada IP.

Te dejo con un script que puede ser integrado en netmount:

```
#!/bin/bash

rcfilesystems="192.168.1.1 192.168.1.10 192.168.1.20 192.168.1.21 192.168.1.22 192.168.1.120 192.168.1.128"

rcfilesystems=${rcfilesystems// /,}   # convert to comma-separated

ips=1 #check ip numbers to mount

while true ; do

        rcfscheck=$(echo $rcfilesystems | cut -d "," -f $ips) #Extract ip

        let ips++

        if [ $rcfscheck ] ; then #ip chechking

                ping -c 1 $rcfscheck 2>&1 1>/dev/null

                if [[ $? = 0 ]] ; then rcfsup="$rcfsup,$rcfscheck" ; fi #Creating a new variable. Only contains IP powered PC.

        else break

        fi

done

echo "Analizadas todas las ip, los PC ON son:"

rcfsup=$(echo $rcfsup | cut -d "," -f 2-) #Removing the first comma

echo $rcfsup #Printing :-)

```

En mi caso al ejecutar el script elimino las ip que no forman parte de mi red: 192.168.1.22 y 192.168.1.128 (Todas las demás estaban on)

```
agd-desktop Prog # ./pelelademadera.sh 

Analizadas todas las ip, los PC ON son:

192.168.1.1,192.168.1.10,192.168.1.20,192.168.1.21,192.168.1.120

agd-desktop Prog # 
```

----------

## pelelademadera

#!/bin/bash

ping -c 1 192.168.0.100 2>&1 1>/dev/null

if [[ $? = 0 ]] ; then echo "hola" ; fi

else echo "no se encuentra el server. no mono nada"; return 0

a ver. esto creo que me sirve, al menos es lo que combine de lo que me postearon.

ahora, me gustaria saber, si yo hago lo siguiente: en vez de echo "hola", quiero que aparezca todo lo que tiene netmount en start, como hago para que me tome todo eso, lo pongo entre llaves? {} ?

gracias

----------

## pelelademadera

bueno, me quedo asi:

 *Quote:*   

> start()
> 
> {       ping -c 1 192.168.0.100 2>&1 1>/dev/null
> 
>         if [[ $? = 0 ]]; then
> ...

 

si el ping tira cero. reporta error y no monta, el return 1 dice que el servicio esta sin iniciar

para el stop, lo mismo, si apague el server antes que el cliente... para que va a desmontar.

el encabezado esta identico

PD, ahora, se puede hacer un loop, o sea, que quede como demonio seria, hacer un ping cada no se, 10 minutos, si se cayo el server, que mate el demonio y que trate en 10 minutos de montar nuevamente y asi?

.... me estoy dando cuenta que cron es lo que necesito

----------

## agdg

Si te he entendido bien, quieres un script que:

- Verifique una lista de ips.

- Compruebe si el ordenador está encendido o no.

- En caso de que esté encendido, que monte la unidad o llame a /etc/init.d/netmount

- Cada X minutos que empiece de nuevo

Tal vez este script, ejecutado vía cron cada X tiempo, te pueda servir.

```

#!/bin/bash

ipl="192.168.1.1#192.168.1.10#192.168.1.20#192.168.1.21#192.168.1.22#192.168.1.120# 192168.1.128"

ips=1 #check ip numbers to mount

while true ; do

     iplcheck=$(echo $ipl | cut -d "#" -f $ips) #Extract ip

     let ips++

     if [ $iplcheck ] ; then #ip chechking

      ping -c 1 $iplcheck 2>&1 1>/dev/null

      if [[ $? = 0 && -z $(mount | grep $iplcheck)) ]] ; then

      iplup="$iplup,$iplcheck" ; fi #New variable. Contains the computer on and not mounted

      else break

     fi

done

iplup=$(echo $iplup | cut -d "," -f 2-) #Removing the first comma

#Command to execute:

echo "Los PC conectados a la red y no montados son:"

echo "Conectar a los siguiente PC: $iplup"

#Uncomment the option chosen

#mount -at $iplup

#/etc/init.d/netmount restart
```

----------

