elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Batch, reiniciar programa luego que detecte que no haya Internet
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Batch, reiniciar programa luego que detecte que no haya Internet  (Leído 2,967 veces)
BALTA00

Desconectado Desconectado

Mensajes: 35


Ver Perfil
Batch, reiniciar programa luego que detecte que no haya Internet
« en: 19 Abril 2016, 05:11 am »

Buenas noches, tengo un programa que hace función de Proxy, trabaja perfecto, pero cuando tengo problemas de conexión si se me va y llega el Internet el proxy deja de reconectar, para evitar eso, hice lo siguiente:

Código:
@echo off
:inicio
if exist testigo.txt del testigo.txt
set ERRORLEVEL =
ping -n 1 www.google.com > testigo.txt
rem La solicitud de ping no pudo encontrar el host
echo Comprobando conectividad ...
@find /C "La solicitud de ping no pudo encontrar el host" testigo.txt > null
rem find /C "recibidos = 0" testigo.txt
 
rem si errorlevel = 0  ha encontrado recibidos=0 lo cual indica que no hay conectivida
if %ERRORLEVEL%==0  goto reiniciar else goto continua

 
:continua
color 17
echo Si hay conectividad     
rem delay de 60seg
@ping -n 15 127.0.0.1 > null
goto inicio
     
:reiniciar
color 16
echo Se fue el Internet
echo Esperando que llegue para reiniciar el proxy
if exist testigo.txt del testigo.txt
set ERRORLEVEL =
ping -n 1 www.google.com > testigo.txt
rem La solicitud de ping no pudo encontrar el host
echo Comprobando conectividad ...
@find /C "La solicitud de ping no pudo encontrar el host" testigo.txt > null
rem find /C "recibidos = 0" testigo.txt
rem si errorlevel = 1  ha encontrado recibidos=1 lo cual indica que ya hay Internet
if %ERRORLEVEL%==1  goto restablecer else goto reiniciar

:restablecer
TASKKILL /IM eth-proxy.exe /F
echo ETH-Proxy cerrado, esperenmos 3 segundos y lo abriremos de nuevo
timeout /t 3 /nobreak

START "ETH-Proxy" "eth-proxy.exe"
goto inicio

Se supone que debería chequear cada minuto si hay conexión, sino hay conexión pasa a la sentencia reiniciar, que ahí debería chequear cuando llegue la conexión, y en lo que llegue debería matar el proceso eth-proxy.exe y volverlo a iniciar, y continuar chequeando si hay o no conexión, el detalle es que no me funciona, simplemente abra y cierra el proceso de manera continua, ¿Qué estoy haciendo mal?


« Última modificación: 19 Abril 2016, 06:13 am por BALTA00 » En línea

Zomkar

Desconectado Desconectado

Mensajes: 180


Ver Perfil
Re: Batch, reiniciar programa luego que detecte que no haya Internet
« Respuesta #1 en: 19 Abril 2016, 06:12 am »

Usa el programador de tareas mejor para ejecutar cada X tiempo. Para saber si hay conexion puedes usar goto+if+https://stackoverflow.com/questions/9329749/batch-errorlevel-ping-response

Aparte, no habrá alguna forma de que los ping vayan a traves del proxy? O comprobar de otra forma que use el proxy? Asi no matarias el proceso cuando no fuese necesario.


En línea

Si vas a por ellos te llamarán violento.
Si explotas a cientos te verán como un ejemplo.
BALTA00

Desconectado Desconectado

Mensajes: 35


Ver Perfil
Re: Batch, reiniciar programa luego que detecte que no haya Internet
« Respuesta #2 en: 19 Abril 2016, 06:14 am »

Usa el programador de tareas mejor para ejecutar cada X tiempo. Para saber si hay conexion puedes usar goto+if+https://stackoverflow.com/questions/9329749/batch-errorlevel-ping-response

Aparte, no habrá alguna forma de que los ping vayan a traves del proxy? O comprobar de otra forma que use el proxy? Asi no matarias el proceso cuando no fuese necesario.

Encontré una forma, acabo de editar el post, ahora necesito ayuda porque no funciona lo que hice...
En línea

Zomkar

Desconectado Desconectado

Mensajes: 180


Ver Perfil
Re: Batch, reiniciar programa luego que detecte que no haya Internet
« Respuesta #3 en: 19 Abril 2016, 06:20 am »

No veo fallos, pero puedes probar a detectar donde están usando pause y echo, si no se llega a ejecutar o falla en algun punto. Si es otro problema, que error te da?

Por otra parte la cosa seria:
Código:
:comprobar conexion
si hay conexion goto continuar else goto reiniciar

:continuar
(esperar y comprobar conexion)

:reiniciar
matar tarea y iniciarla
goto: comprobar conexion

De esta forma  simplificas el codigo, solo hay que comprobar conexion una vez. La funcion que pusiste que detecta si ya hay internet la quitaria ya que si no hay internet tampoco es un problema que mates el proceso.

PD: he visto algo
Código:
@find /C "La solicitud de ping no pudo encontrar el host" testigo.txt > null

Esto no funcionará si ping da este mensaje:
Código:
Tiempo de espera agotado para esta solicitud.

Deberías usar el que tienes justo debajo el de "recibidos = 0" que tiene REM delante (comentario).
Aparte quita los "set ERRORLEVEL=", no es necesario y se desaconseja:
Citar
You should never attempt to write to the %ERRORLEVEL% variable because the value you set will then take precedence over the internal ERRORLEVEL.
http://ss64.com/nt/errorlevel.html
« Última modificación: 19 Abril 2016, 06:44 am por Zomkar » En línea

Si vas a por ellos te llamarán violento.
Si explotas a cientos te verán como un ejemplo.
BALTA00

Desconectado Desconectado

Mensajes: 35


Ver Perfil
Re: Batch, reiniciar programa luego que detecte que no haya Internet
« Respuesta #4 en: 19 Abril 2016, 08:19 am »

Así como dices:
Código:
@echo off
:inicio
if exist testigo.txt del testigo.txt
set ERRORLEVEL =
ping -n 1 www.google.com > testigo.txt
rem La solicitud de ping no pudo encontrar el host
echo Comprobando conectividad ...
@find /C "La solicitud de ping no pudo encontrar el host" testigo.txt > null
rem find /C "recibidos = 0" testigo.txt
 
rem si errorlevel = 0  ha encontrado recibidos=0 lo cual indica que no hay conectivida
if %ERRORLEVEL%==0  goto reiniciar else goto continua
 
:continua
color 17
echo Si hay conectividad     
rem delay de 1min
@ping -n 60 127.0.0.1 > null
goto inicio
     
:reiniciar

TASKKILL /IM eth-proxy.exe /F
echo ETH-Proxy cerrado, esperenmos 3 segundos y lo abriremos de nuevo
timeout /t 3 /nobreak

START "ETH-Proxy" "eth-proxy.exe"
goto inicio

funciona, solo que cuando no hay conexión cierra y abre el proceso constantemente, no es en realidad un problema muy grande, pero es medio incómodo.
En línea

Zomkar

Desconectado Desconectado

Mensajes: 180


Ver Perfil
Re: Batch, reiniciar programa luego que detecte que no haya Internet
« Respuesta #5 en: 19 Abril 2016, 22:44 pm »

Mmmm y si le aumentas el valor de:
Código:
timeout /t 3 /nobreak

Y sino, puedes poner un ping -n >nul.
O más facil, al final de :reiniciar pon goto continua.

Si quieres que realmente solo lo mate en cuanto vuelva la conexion si que tendrias que hacerlo de una forma similar a como lo tenias.

:reiniciar
esperar X segundos
Si no hay conexion goto reiniciar
matar tarea
goto inicio

El resto de codigo seria el mismo, tendrias que volver a copiar la funcion comprobar conexion aqui, así creas un bucle del que se sale si hay conexion.
En línea

Si vas a por ellos te llamarán violento.
Si explotas a cientos te verán como un ejemplo.
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.708



Ver Perfil
Re: Batch, reiniciar programa luego que detecte que no haya Internet
« Respuesta #6 en: 30 Abril 2016, 14:37 pm »

Citar
Código
Eso es totalmente inapropiado y erroneo, es un claro ejemplo de malas prácticas de uso.

  • La variable ERRORLEVEL ya está definida de forma nativa, es una variable dinámica, no necesitas redeclararla.
  • Si declaras una variable usando un mismo nombre de variable dinámica, lo único que vas a conseguir es sustituir la variable dinámica por tu variable local (por lo que jamás obtendrás el valor de la variable dinámica).
  • Entre el nombre de la variable y el símbolo de asignación de valor (=) no debe existir ningún espacio, por que de lo contrario ese espacio se suma al nombre de tu variable, esto quiere decir que el nombre real de tu variable es "ERRORLEVEL ", no "ERRORLEVEL". Esto quiere decir además que en tu código nunca estás accediendo a tu variable local, sino a la variable dinámica.
  • Aparte de lo mencionado, deberías encerrar entre comillas dobles el nombre y el valor de la variable para prevenir otros tipos de errores (de sintaxis):
Código
  1. Set "Var=Value"
    (lo mismo se aplica a variables numéricas)[/li]

En resumen, debes eliminar esa variable, por que aparte de no necesitarla tampoco le estás dando ningún uso (ni podrías dárselo correctamente con la intención de sustituir la variable dinámica y aun así esperar obtener el mismo valor...)

Saludos.
En línea


Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines