shell script para mantener siempre 10 programas en ejecucion

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
jjmcclure
Forista Nuevo
Forista Nuevo
Mensajes: 3
Registrado: Mié Ene 11, 2012 6:16 pm

shell script para mantener siempre 10 programas en ejecucion

Mensaje por jjmcclure »

Hola, soy nuevo en el foro y necesito un poco de ayuda para escribir un shell script.
Simplemente quiero hacer un script que ejecute un programa 10 veces casi de forma simultanea ( solo con un sleep 0.1 entre programa y programa) pero quiero que cada vez que uno de los diez programas finaliza, inmediatamente se empiece a ejecutar otro de forma que siempre haya diez programas ejecutandose. Por supuesto este proceso terminara cuando se cumpla una determinada condicion.
Alguien tiene alguna idea de como podria hacerce dicho script??

Hasta ahora lo hacia con:

a=1
while [ $a -le 10 ]
do
nice -n 5 ./montecarlo170 &
sleep 0.1
a=`expr $a + 1`
done

pero claro esto no me sirve porque tengo que ejecutar otra vez el script cuando haya terminado el anterior
montecarlo170 es el programa que quiero ejecutar.

Gracias de antemano!!!

Saludos!!

Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: shell script para mantener siempre 10 programas en ejecucion

Mensaje por akodo »

Espero que sepas corregir lo que falle (que seguro que falla):

Código: Seleccionar todo

#!/bin/bash
function launch_montecarlo(){
  nprograms=`ps -C montecarlo | wc -l`    #debería salir el número de veces que el programa llamado "montecarlo" se está ejecutando + 1
  if (( $nprograms >= 11 )) ; then
    return -1
  else
    ./montecarlo &
  fi
  return 0
}

seg=`date +%S`
while (( $seg < 50 ))    #por poner alguna condición de finalización
do
  launch_montecarlo
  if (( $? = -1 )) ; then   #si el resultado devuelto por la función es -1 ya hay 10 programas ejecutándose -> esperamos
    sleep 2
  fi
done
Comprueba que la sintaxis sea la correcta especialmente en las condiciones, y comprueba que el "ps -C" funciona de acuerdo a lo que se espera
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])

jjmcclure
Forista Nuevo
Forista Nuevo
Mensajes: 3
Registrado: Mié Ene 11, 2012 6:16 pm

Re: shell script para mantener siempre 10 programas en ejecucion

Mensaje por jjmcclure »

Muchas gracias por responder akodo.

No he conseguido arreglar el script para que no me de fallos, he probado de mil maneras y nada, me dice que hay un parentesis inesperado detras de launch_montecarlo, y he probado quitar los parentesis y me dice function: not found. Tambien he probado quitar la palabra function y me dice Cannot Open 50: no such file.

Al final he probado de otra manera un poco chapucera pero que me funciona, y es la siguiente:
Hago un script que lance 10 veces otro script. Este ultimo lo que hace es que lanza el programa montecarlo un determinado numero de veces pero por orden, es decir, que hasta que no termina uno no empieza otro (simplemente le pongo un wait al final ) y con esto siempre hay 10 montecarlo ejecutandose a la vez.

Aunque me ha resultado muy interesante el script que propones tu, siempre se aprenden cosas nuevas :)

Gracias.

Avatar de Usuario
niky45
Forista Ancestral
Forista Ancestral
Mensajes: 9186
Registrado: Jue Abr 12, 2007 7:00 am
Ubicación: tras la pantalla (...)
Contactar:

Re: shell script para mantener siempre 10 programas en ejecucion

Mensaje por niky45 »

solucion limpia:
a=1

Código: Seleccionar todo

while [ $a -le 10 ]; do
    while  [ true ] ; do
          ejecutar montecarlo ## traduce tu, ok??
    done
    sleep 0,1s
    a=$((a+1))
done
eso lanza 10 instancias, cada 0.1 s. cada una de ellas, volvera a lanzar el programa en cuanto este finalice.

:)
#446716
>>"Linux: the operating system with a CLUE... Command Line User Environment".
(seen in a posting in comp.software.testing)

[ DNFD ] - [ F4A ] - [ dotfiles ]

Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: shell script para mantener siempre 10 programas en ejecucion

Mensaje por akodo »

niky45 escribió:solucion limpia:
a=1

Código: Seleccionar todo

while [ $a -le 10 ]; do
    while  [ true ] ; do
          ejecutar montecarlo ## traduce tu, ok??
    done
    sleep 0,1s
    a=$((a+1))
done
eso lanza 10 instancias, cada 0.1 s. cada una de ellas, volvera a lanzar el programa en cuanto este finalice.

:)
¿El "while [ true ]" no se metería en un bucle infinito siempre?

Corrijo un par de cosas que he checkeado:

Código: Seleccionar todo

function launch_montecarlo {
  ....
}
nótese que se quitan los paréntesis y se sustituyen por un espacio.

Lo del "cannot open: 50" es porque te esta considerando el "(( $seg < 50 ))" como que estás abriendo el fichero "50" (que no existe). Debería funcionar, pero si no es así sustituyes la línea del while por:

Código: Seleccionar todo

while [[ $seg -lt 50 ]]
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])

jjmcclure
Forista Nuevo
Forista Nuevo
Mensajes: 3
Registrado: Mié Ene 11, 2012 6:16 pm

Re: shell script para mantener siempre 10 programas en ejecucion

Mensaje por jjmcclure »

Hola de nuevo.

Ese codigo (Niky42) es mas o menos el que he utilizado yo pero con otras condiciones, pero claro para que hayan a la vez 10 programas montecarlo ejecutandose hay que lanzar ese script 10 veces, por eso utilice otro script para lanzar ese script 10 veces :)

Akodo el codigo me sigue dando errores, eso que dices lo probe la otra vez y nada, no se que puede ser lo que esta causando los errores.

Responder
  • Temas similares
    Respuestas
    Vistas
    Último mensaje