cerrar y reiniciar multiples veces una aplicación

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: maiku, akodo

Responder
Avatar de Usuario
doc
Forista Ancestral
Forista Ancestral
Mensajes: 3557
Registrado: Mié Ago 11, 2010 10:32 am
Ubicación: Oviedo-es_ES
Contactar:

cerrar y reiniciar multiples veces una aplicación

Mensaje por doc »

Hola. Perdonad los expertos, porque mi pregunta es sobre una cosa un poco rara: Y es que descubro que mi aMule descarga rapidísimo si cierro y reinicio muchas veces la aplicación (por ejemplo cada 6 minutos). Entonces, para no estar pendiente, en descargas largas, pienso que debería poder programarse, NO SE CÓMO, este proceso.
A lo único que llega mi 'cultura en programación' es a que...
A) Se puede lanzar una orden, cada cierto tiempo, con el comando…
watch -n [numero_segundos] [orden_a_ejecutar]
B) Se puede cerrar un proceso (de usuario) que esté corriendo con la orden
pkill nombre_proceso
(o sea que el mandato
watch -n 360 pkill amule
teóricamente cerraría mi amule cada 6 minutos)

C) Ni idea de cómo se puede ordenar una pausa de (por ejemplo) 5 segundos. A lo mejor podría servir el mandato que he visto por ahí...
read -rsp $'Press any key or wait 5 seconds to continue...\n' -n 1 -t 5;.
(pero seguro que hay algo más fácil)
D) Y para arrancar el amule puedo crear un script de nombre ‘amule_script’ con
#!/bin/sh
amule

y ejecutarlo con la orden
sh amule_script

Bien pero... ¿Y cómo junto todas estas piezas?
¿Y cómo lo lanzo tras arrancar amule por primera vez?
y, sobre todo (o 'ante todo')...
¿Podría funcionar algo así? ¿Habría alguna alternativa mucho mejor, hecha por un 'pro'?

(gracias por leerme...)

Avatar de Usuario
neurus
Forista Legendario
Forista Legendario
Mensajes: 1837
Registrado: Dom Oct 10, 2004 7:00 am

Re: cerrar y reiniciar multiples veces una aplicación

Mensaje por neurus »

Para pausar un script se usa la instrucción sleep.
sleep 60; por ejemplo, pausa la ejecución durante 60 segundos.

Una forma rápida y algo sucia de armar tu script sería mediante un bucle infinito:

Código: Seleccionar todo

while [ 0 -lt 1 ]; do
amule
sleep 3600
pkill amule
done

Avatar de Usuario
doc
Forista Ancestral
Forista Ancestral
Mensajes: 3557
Registrado: Mié Ago 11, 2010 10:32 am
Ubicación: Oviedo-es_ES
Contactar:

Re: cerrar y reiniciar multiples veces una aplicación

Mensaje por doc »

gracias, neurus, tu siempre al rescate. Bueno, me pondré a investigar con las pistas que me das.
por supuesto, lo de la primera línea (while....) no entiendo lo que significa, pero hago 'un acto de fe', y lo usaré.
El problema actual es que, poniendo tu código en un script (bueno, usando 60 en vez de 3600, claro) y ejecutándolo, amule me arranca... pero no se cierra a los 60 segundos.
Pero... si lo cierro a mano, a los 60 segundos me arranca solo. Y así siempre, salvo que reinicie (o (creo) use la orden, por consola 'pkill sh')
Así que me queda por averiguar cómo puedo hacer que el amule se cierre solo.

He probado también el script...

Código: Seleccionar todo

#!/bin/sh
while [ 0 -lt 1 ]; do
amule
sleep 60
gnome-terminal --command=”pkill amule”
done
pero tampoco va (sigue sin cerrar a los 60 seg)
A ver si mañana tengo las ideas más claras...

Avatar de Usuario
neurus
Forista Legendario
Forista Legendario
Mensajes: 1837
Registrado: Dom Oct 10, 2004 7:00 am

Re: cerrar y reiniciar multiples veces una aplicación

Mensaje por neurus »

killall amule sería muy bestia?

Avatar de Usuario
doc
Forista Ancestral
Forista Ancestral
Mensajes: 3557
Registrado: Mié Ago 11, 2010 10:32 am
Ubicación: Oviedo-es_ES
Contactar:

Re: cerrar y reiniciar multiples veces una aplicación

Mensaje por doc »

gracias, neurus. He probado 'killall amule' pero es lo mismo.

sin embargo, como el sueño es un buen consejero, esta mañana me levanté con la idea de dar la vuelta al tema. O sea, partir del aMule encendido (que es lo normal, tenerlo arrancado inicialmente) Resulta que si lo pongo así...

Código: Seleccionar todo

#!/bin/sh
while [ 0 -lt 1 ]; do
sleep 60
pkill amule
sleep 10
amule
done
y parto (como he dicho) de un aMule previamente arrancado, me funciona perfectamente: a los 60 segundos (por no alargar las pruebas) se me cierra el aMule, y, 10 segundos más tarde, se me vuelve a abrir automáticamente.
¿Objetivo conseguido...? Pues desgraciadamente, NO, porque esto solo lo realiza una vez, o sea tras este encendido, ya no vuelve a apagarse solo. O sea, no hay bucle.

Así que solo me queda pensar (y/o preguntar, claro) cómo puedo forzar el que este script siga en bucle, repitiéndose cada vez que aMule esté encendido.
También he probado iniciar el script con un simple
#!/bin/sh
while :
do
...
y lo mismo: solo funciona la primera vez, no hace bucle.

Avatar de Usuario
neurus
Forista Legendario
Forista Legendario
Mensajes: 1837
Registrado: Dom Oct 10, 2004 7:00 am

Re: cerrar y reiniciar multiples veces una aplicación

Mensaje por neurus »

Ok, prueba esto:

Código: Seleccionar todo

#!/bin/sh
while true; do
sleep 60
pkill amule
sleep 10
amule
done

Avatar de Usuario
doc
Forista Ancestral
Forista Ancestral
Mensajes: 3557
Registrado: Mié Ago 11, 2010 10:32 am
Ubicación: Oviedo-es_ES
Contactar:

Re: cerrar y reiniciar multiples veces una aplicación

Mensaje por doc »

¡Mierda...! tampoco va (quiero decir que hace perfectamente el primer ciclo completo (cerrar a los 60 seg + abrir tras 10 segundos)... pero a aprtie de ahí queda funcionando, no hace los siguientes.
Seguiré investigando (la pena es que ya me he descargado completamente (cerrando y arrancando aMule multiples veces, a mano) la segunda temporada de El Mandaloriano... :D :D )

Avatar de Usuario
neurus
Forista Legendario
Forista Legendario
Mensajes: 1837
Registrado: Dom Oct 10, 2004 7:00 am

Re: cerrar y reiniciar multiples veces una aplicación

Mensaje por neurus »

Claro, ahora entiendo. La última vez que abre amule, el script espera la terminación del comando para continuar su propia ejecución, lo que lo vuelve inútil.

Prueba esto (cambié amule por eboard, porque no uso amule). Además, cambia la cantidad de segundos una vez que lo hayas probado. Y quizás prefieras usar pkill en lugar de killall, que es demasiado bestia.

Código: Seleccionar todo

while true; do eboard & sleep 5 && killall eboard & sleep 3  ;done

Avatar de Usuario
doc
Forista Ancestral
Forista Ancestral
Mensajes: 3557
Registrado: Mié Ago 11, 2010 10:32 am
Ubicación: Oviedo-es_ES
Contactar:

Re: cerrar y reiniciar multiples veces una aplicación

Mensaje por doc »

gracias, neurus.
Pero ¡Qué va...! Horrible. si pongo el script

Código: Seleccionar todo

#!/bin/sh
while true; do amule & sleep 30 && killall amule & sleep 5  ;done
efectivamente consigo continuidad... pero cada 5 segundos me arranca un amule distinto (creo que se dice 'otra instancia del amule')... y tengo que reiniciar el ordenador porque 'me es difícil apagar el fuego'

me pondré a investigar. Por mi parte, tras mi sueño 'activo', me levanto con dos ideas:
a) ¿por qué no explorar el mandato watch, que al parece 'lanza' una orden cada cierto tiempo? (así, podría lanzar cada cierto tiempo el propio script que apagaba y encendía amule 'solo una vez')
b) ¿Y si en vez de while uso if...? (o sea, si amule funciona... aplica un script de apagar y encender (¿cada cierto tiempo?). Y si no... 'no hagas nada')
Claro, tendré que buscar cómo indicar, en bash, que 'amule funciona' (y cómo decir 'no hagas nada')

(Es lo malo de los novatos, que ni sabemos programar en bash ni, si lo estudiásemos, lo retendríamos, por falta de constancia en su uso. Vamos, como si estudias el Photoshop... y luego no lo usas. Se te olvida. Tendré que revisar mis apuntes, que alguna vez asomé mis narices por estos temas de 'scripting'...)

En todo caso, reitero mi agradecimiento por dedicarme tu tiempo.

Avatar de Usuario
doc
Forista Ancestral
Forista Ancestral
Mensajes: 3557
Registrado: Mié Ago 11, 2010 10:32 am
Ubicación: Oviedo-es_ES
Contactar:

Re: cerrar y reiniciar multiples veces una aplicación

Mensaje por doc »

bueno... EUREKA (que diría Arquimedes). Encontré la solución. Ahora la cuento... pero primero pido perdón a los que saben de programación porque los que no tenemos ni idea a menudo encontramos soluciones 'poco ortodoxas', ya que no tenemos más armas que la imaginación, y un poquito de sentido común.
Así que me pregunté... ¿Y por qué me empeño en crear un script marvilloso, que entre en bucle, etc, etc? porque lo único que quiero es que mi aMule pare y arranque cada, por ejemplo 3 minutos (porque ya dije que en estos primeros instantes de 'enganchar' con las fuentes es cuando descarga a más velocidad).
Y viendo que es muy lioso tener un script que lo haga posible... decidí hacerlo con dos instancias, una para mardar arrancar cada cierto tiempo, y otra para mandaer que se apague.. que así me parecía que tenía que ser mucho más fácil.
Así que...
a) abro una terminal y escribo esta orden

Código: Seleccionar todo

watch -n 20 amule
con lo que me arranca el amule (en principio, cada 20 segundos)
b) Ahora abro otra, y lanzo este script...

Código: Seleccionar todo

#!/bin/bash
amule=`pidof amule`
while [ $amule -gt 0 ]; do
sleep 180
pkill amule
done
(Bueno, en realidad lo he hecho más fácil, me he creado dos lanzadores en el Escritorio (marcando, por supuesto eso de 'launch in terminal'), y con dos clics pongo todo en marcha.)
Imagen
Y esta chapucilla (que me costó mis horas de pruebas de 'ensayo-error', hasta descubrir que el tiempo de 'sleep' tiene que ser mayor que el de 'watch'... aún no se por qué, y que el tiempo que se pasa amule descargando es la diferencia entre ambos), de entrada me funciona.
Aunque de momento dejaré sin poner lo de 'Solucionado', porque seguro que se puede perfeccionar o darle forma de 'programa de un programador'

Responder
  • Temas similares
    Respuestas
    Vistas
    Último mensaje