Linux/Unix Shell Scripting - script keep alive ppp no va desde cron, si desde shell

   
Vista:

script keep alive ppp no va desde cron, si desde shell

Publicado por kk003 (21 intervenciones) el 21/03/2014 04:52:13
Buenas,

Estoy trabajando en un simple script que me reconecte el modem 3g que tengo en una rasspberry pi si se cae la conexion.
El caso es que aparentemente funciona perfecto al ejecutarlo desde la shell, pero cuando lo paso a tarea de cron siempre intenta encender el modem, independientemente del estado de este.
La tarea de cron se ejecuta cada 3 minutos:
*/3 * * * * /root/keep-alive-3g.sh >/dev/null 2>&1

y cada 3 minutos me aparece en el log el intento de conexion, como digo este el modem conectado o no:

vie mar 21 04:30:01 CET 2014 El modem 3g estaba desconectado
vie mar 21 04:30:01 CET 2014 Reconectando el modem 3g .....
vie mar 21 04:30:41 CET 2014 El intento de reconexion del modem 3g ha fracasado!!!
vie mar 21 04:30:41 CET 2014 Proximo reintento en 3 minutos.
*****************************************
vie mar 21 04:33:01 CET 2014 El modem 3g estaba desconectado
vie mar 21 04:33:01 CET 2014 Reconectando el modem 3g .....
vie mar 21 04:33:41 CET 2014 El intento de reconexion del modem 3g ha fracasado!!!
vie mar 21 04:33:41 CET 2014 Proximo reintento en 3 minutos.
*****************************************
etc, etc....

Agradeceria cualquier ayuda.
Muchas gracias.

Elo aqui:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/sh
 
ppp0=`ifconfig -a | grep "ppp0"`
if [ -n "$ppp0" ]; then # -n tests to see if the argument is non empty
exit
fi
 
  echo `date` "El modem 3g estaba desconectado" >> /var/log/modemstatus.log
  echo `date` "Reconectando el modem 3g ..... "  >> /var/log/modemstatus.log
  sleep 10
  /etc/init.d/autoconnectnet start
  wait
  sleep 10
 
ppp0=`ifconfig -a | grep "ppp0"`
if [ -n "$ppp0" ]; then # -n tests to see if the argument is non empty
  echo `date` "Modem 3g reconectado satisfactoriamente!!!" >> /var/log/modemstatus.log
  echo "*****************************************" >> /var/log/modemstatus.log
exit
else
  echo `date` "El intento de reconexion del modem 3g ha fracasado!!!" >> /var/log/modemstatus.log
  echo `date` "Proximo reintento en 3 minutos." >> /var/log/modemstatus.log
  echo "*****************************************" >> /var/log/modemstatus.log
fi
exit
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

script keep alive ppp no va desde cron, si desde shell

Publicado por Tom (253 intervenciones) el 21/03/2014 09:20:19
Quizás, al ejecutar desde el cron, lo hace como usuario root pero _sin_ cargar el entorno (.profile, .bashrc y demás).
Así que, supongo, el shell no encuentra el ejecutable ifconfig.

Yo probaría (y es una buena norma al hacer scripts para cron) a poner el path en cada ejecutable "dudoso":

1
ppp0=`/usr/sbin/ifconfig -a | grep ppp0`
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

script keep alive ppp no va desde cron, si desde shell

Publicado por kk003 (21 intervenciones) el 21/03/2014 16:01:20
Buenas,
Efectivamente ese era el problema.
Muchas gracias por la ayuda y el consejo.
Con ese tip he resuelto en 5 minutos lo que ayer no pude en 3 horas.
He modificado el script y a falta de mas testing parece funcionar "bastante" bien.
Lo dejo aqui por si es de utilidad a alguien mas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/sh
 
ppp0=`/sbin/ifconfig -a ppp0 | grep "inet addr:"`
if [ -n "$ppp0" ]; then # -n tests to see if the argument is non empty
exit
fi
 
  echo `date` "El modem 3g estaba desconectado" >> /var/log/modem_error.log
  echo `date` "Reconectando modem ..... "  >> /var/log/modem_error.log
  /etc/init.d/autoconnectnet start
  wait
# sleep 10 # Le damos unos segundos para que adquiera ip antes de escribir el log
 
ppp0=`/sbin/ifconfig -a ppp0 | grep "inet addr:"`
if [ -n "$ppp0" ]; then # -n tests to see if the argument is non empty
  echo `date` "Modem reconectado satisfactoriamente!!!" >> /var/log/modem_error.log
  echo "*****************************************" >> /var/log/modem_error.log
exit
else
  echo `date` "El intento de reconexion parece haber fracasado!!!" >> /var/log/modem_error.log
  echo `date` "Dandole al modem 10 segundos mas para que adquiera ip ...." >> /var/log/modem_error.log
  sleep 10
 
ppp0=`/sbin/ifconfig -a ppp0 | grep "inet addr:"`
if [ -n "$ppp0" ]; then # -n tests to see if the argument is non empty
  echo `date` "Modem reconectado satisfactoriamente!!!" >> /var/log/modem_error.log
  echo "*****************************************" >> /var/log/modem_error.log
exit
fi
  echo `date` "2ª Comprobacion: El modem no esta conectado a internet!!!" >> /var/log/modem_error.log
  echo `date` "Tambien es posible que el modem este tardando en adquirir ip" >> /var/log/modem_error.log
  echo `date` "Proximo reintento en 3 minutos" >> /var/log/modem_error.log
  echo "*****************************************" >> /var/log/modem_error.log
fi
exit
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

script keep alive ppp no va desde cron, si desde shell

Publicado por Tom (253 intervenciones) el 21/03/2014 22:23:38
Tiene muy buena pinta tu script.
Otro "tip", ya que todos tus mensajes van al mismo log ... y es fácil equivocarse y poner en algún sitio '>' en vez de '>>' ( a mí me ha pasado y me he vuelto loco):

1
2
3
4
5
6
7
8
9
10
11
12
(
ppp0=`/sbin/ifconfig -a ppp0 | grep "inet addr:"`
if [ -n "$ppp0" ]; then # -n tests to see if the argument is non empty
exit
fi
 
  echo `date` "El modem 3g estaba desconectado"
  echo `date` "Reconectando modem ..... "
  /etc/init.d/autoconnectnet start
  wait
... todo lo demás ...
) >> /var/log/modem_error.log
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

script keep alive ppp no va desde cron, si desde shell

Publicado por kk003 (21 intervenciones) el 21/03/2014 23:10:02
Ala, si que es interesante ese tip. Gracias :-).

Te importaria explicar muy brevemente la funcion de los parentesis?
Tengo que encerrar el bloque que quiero enviar al log entre ellos o todo el script?
Parece que es esto ultimo y por lo que dices es lo tiene mas sentido, seria genial.
Disculpa las preguntas, pero es que ya no tengo la rasspberry a mano, asi que no puedo probar.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

script keep alive ppp no va desde cron, si desde shell

Publicado por Tom (253 intervenciones) el 22/03/2014 12:49:39
Los paréntesis indican la apertura de un subshell:

http://www.tldp.org/LDP/abs/html/subshells.html


Generalmente se encierra todo el código, para que no haya líos de variables no exportadas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar