Una de las cosas que siempre nos encontramos los novatos de Linux cuando buscamos en internet soluciones a problemas es que alguien dice en un foro: “puedes crear un script”.
Bien, las primeras veces ni les prestamos atención, script es una palabra rara que no sabemos ni lo que significa, después nos decidimos y copiamos línea por línea lo que ponen y ¡funciona!.
Tiempo después, buscamos lo que significa y pensamos: “esta chulo esto de los scripts”, y nos atrevemos a hacer pequeñas modificaciones en alguno que encontramos.
Incluso más adelante empezamos a hacer muestros pequeños scripts.
Todo esto viene porque acabo de descubrir una chorrada que me ha gustado bastante, se que es muy simple y que la mayoría lo conocereis, pero aquí pongo lo que he hecho:
Mi conexión wifi se corta de vez en cuando y ya hace un tiempo que descubrí que se arreglaba si reiniciaba la conexión, esto se hace con un simple:
$ sudo ifdown ra0 && sudo ifup ra0 #donde “ra0″ es mi tarjeta wifi
Pues con esto andaba hasta que hoy me he decidido a hacerlo de una manera más fácil, creo un script que haga esa operación; para esto creo un documento de texto (lo he llamdo red) que contiene estas líneas:
#!/bin/sh
sudo ifdown ra0
sudo ifup ra0
Este documento lo he guardado en /usr/bin para poder llamarlo desde cualquier sitio:
$ sudo cp red /usr/bin
Y le cambio los permisos para que sea ejecutable:
$ sudo chown 747 /usr/bin/red
Vale, ahora desde cualquier terminal escribo “red” y se reinicia la tarjeta, para hacerlo más fácil (no siempre tengo abierta una terminal), creo un lanzador (botón derecho->crear un lanzador…); Nombre: red; Comando: red; pero cuando lo ejecuto no pasa nada, para ver que es lo que hace hago un “ejecutar en una terminal” y me encuentro con:
Password:_
Vale, lo que yo quiero es que me salga esa ventanita que me pregunta la contraseña antes de ejecutar algún servicio, para ello busco algún lanzador que haga lo que pido yo y miro en las propiedades que en el comando pone: “gksu loquesea”, eso es, hago la prueba y le pongo a mi lanzador gksu antes de red y voila.
Bueno, eso es todo, era la primera vez que lo hacía y me ha hecho ilusión.
/*Editado*/
En los comentarios está la solución definitiva
Sindicación RSS
Sindicación por email

7 respuestas hasta el momento ↓
charlie // 14 Junio, 2006 a 4:50 pm |
Hey saludos compadre en novilladas de Ubuntu xD
Veo que te vas buscando la vida tu sólo (a todos los novatos nos toca currárnoslo xC ) pero, y desde mi falta de experiéncia, me gustaría darte alguna idea.
Por lo que veo, tu script hay que lanzarlo cuando ha fallado la tarjeta, pero… ¿porqué no hacer que funcione siempre?
Podrías hacer algún ping a por ejemplo google (quizá al loopback funcionaría, no sé), y cuando no consiga enviar datos, que haga ese down-up; si consigues que eso funcione, lo endiñas en el init para que esté siempre rulando en backgroud y así te reiniciará la tarjetilla en cuanto falle; y si lo consigues cuelga la recetilla por aquí que haré un copy&paste jeje.
Que vaya bien!
pepitogrillo // 14 Junio, 2006 a 6:40 pm |
Hola, gracias por tu idea, tendré que estudiar lo del loopback, quizás haciendo ping al router, no me fio de hacerlo a una dirección externa porque tendrías que ver como tengo las conexiones en mi casa, router wifi para la red, router de un puerto como puerta de enlace (que falla más que una escopeta de feria), cuando me aburra un rato ya miraré algo de eso.
Un saludo!
pepitogrillo // 14 Junio, 2006 a 11:23 pm |
Vale, me he aburrido antes de lo que pensaba y he modificado significativamente el script, ahora queda así:
#!/bin/bash
#hace un ping de tres paquetes al router
ping -c 3 192.168.0.4 > /dev/null
#recoge el resultado: 1 = no recibe, 0 = recibe
if [ "$?" = 1 ]; then
# si no recibe los paquetes reinicia la tarjeta
ifdown ra0
ifup ra0
#sale del script
fi
exit 0
Creo que eso funcionará, aunque no lo he podido probar mucho, además he hecho que se ejecute cada 5 minutos añadiendo al crontab (/etc/crontab) la siguiente línea:
*/5 * * * * root /usr/bin/red
charlie // 15 Junio, 2006 a 3:04 pm |
xD sí que te has aburrido protico jeje. Lo probaré y miraré de hacer que se ejecute en background todo el tiempo; en c se podría hacer un while(1) pero en bash no se… quizá con la csh (la shell en c) se podría hacer algo similar. Cuando me aburra xD miraré de conseguirlo (no hace ni 6 meses tube que currarme prácticas de la uni en csh y ya lo he olvidado… el alcohol xD )
De todas maneras, casi que lo mejor sería que mirases el porqué de la caida de la conexión… ¿és la tarjeta o que tu proveedor te cambia la ip y tienes que renegociar? no creo que sea lo segundo porque casi ni te enterarias (excepto que los p2p se te reiniciarian).
Si es que tienes una tarjeta rara y los drivers no están muy afinados, quizá con ndiswrapper te funcionaría mejor. Voy a hacer un hueco y a probar el script (aunque a mí me rula bien la wifi)
charlie // 15 Junio, 2006 a 3:52 pm |
Bueno, he probado tu solución y parece correcta; aunque dado que no tengo fallos con la tarjeta no te lo puedo asegurar; lo que no si tirará bién es cuando no tengas conexión al router… supongo que te lo habrás mirado mejor que yo pero creo que si no lo encuentra dirá algo así como “the host is unreachable” en lugar de devolver un 1… ni idea. Voy a ver lo de que corra contínuo
charlie // 15 Junio, 2006 a 4:03 pm |
Prueba a ponerlo en el init o lánzalo una vez con cron.
Solución bastante poco elegante (lo siento):
#!/bin/bash
bucle=0
while [ $bucle -lt 1 ]; do
#ping de 3 paquetes al router
ping -c 3 192.168.1.1 > /dev/null
# recoge el resultado; 1 si error, 0 si éxito
if [ "$?" = '1' ]; then
ifdown eth0
ifup eth0
fi
done
exit 0
pepitogrillo // 16 Junio, 2006 a 12:56 am |
Por partes, lo de “the host is unreachable” me sale cuando la tarjeta está abajo (otro día intentaré que cuando esté abajo la levante), cuando no recibe los paquetes no pone nada. El fallo está en mi tarjeta, pero a partir de ahora no me molestará tanto así que no la voy a tocar. He solucionado lo de que corra continuo, pero para mi problema me quedo con mi anterior opción, de todos modos pongo aquí el script:
/#! /bin/bash
#hace el ping hasta que salga fallo, 192.18.0.4 es la ip del router
while ping -c 3 192.168.0.4 > /dev/null;
do
ping -c 3 192.168.0.4 > /dev/null;
done
#si sale fallo reinicia la tarjeta
ifdown ra0
ifup ra0
exit 0
La salida del script ejecutandolo con -x es:
+ ping -c 3 192.168.0.4
+ ping -c 3 192.168.0.4
+ ping -c 3 192.168.0.4
+ ifdown ra0
+ ifup ra0
+ exit 0
A pesar de no usar este script finalmente (al menos de momento) esta es la grandeza de linux, yo pongo una tontería que se me ha ocurrido y alguien que lo lee (en este caso charlie, gracias), dice: "oye, y si le pones esto para que te vaya mejor…" Es impresionante.