controlar el numero de ejecuciones simultaneas de un programa

Comentarios sobre el buen funcionamiento del sistema y como personalizarlo a tus necesidades.

Moderadores: doc, mcun

Responder
Frank461
Forista Nuevo
Forista Nuevo
Mensajes: 4
Registrado: Sab Jul 23, 2016 8:38 pm

controlar el numero de ejecuciones simultaneas de un programa

Mensaje por Frank461 » Sab Jul 23, 2016 8:41 pm

Buen dia.


Soy algo nuevo en el tema, y eh estando buscando una manera para que puede limitar el numero de ejecuciones simultaneas de un programa..


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

Re: controlar el numero de ejecuciones simultaneas de un programa

Mensaje por doc » Sab Jul 23, 2016 11:04 pm

La pregunta previa es qué te hace tener que ejecutar simultáneamente varias veces una misma aplicación (y, quizás, empezar por procurar evitarlo)
Avatar de Usuario
neurus
Forista Legendario
Forista Legendario
Mensajes: 1801
Registrado: Dom Oct 10, 2004 7:00 am

Re: controlar el numero de ejecuciones simultaneas de un programa

Mensaje por neurus » Dom Jul 24, 2016 12:00 am

Busca tutoriales para protegerte de bombas fork. El comando es ulimit.

También se puede editar el archivo /etc/security/limits.conf, aunque en este caso, el límite debería ser lo suficientemente alto, porque lo que se está impidiendo allí es que la cantidad de procesos totales supere determinado número.

Otro comando interesante es "nice". Permite subir o bajar la prioridad de un proceso determinado.

En cualquier caso, con la información que brindas -ya un clásico en usuarios nuevos- poco más que esto se te puede responder.
Frank461
Forista Nuevo
Forista Nuevo
Mensajes: 4
Registrado: Sab Jul 23, 2016 8:38 pm

Re: controlar el numero de ejecuciones simultaneas de un programa

Mensaje por Frank461 » Lun Jul 25, 2016 4:49 pm

neurus escribió:Busca tutoriales para protegerte de bombas fork. El comando es ulimit.

También se puede editar el archivo /etc/security/limits.conf, aunque en este caso, el límite debería ser lo suficientemente alto, porque lo que se está impidiendo allí es que la cantidad de procesos totales supere determinado número.

Otro comando interesante es "nice". Permite subir o bajar la prioridad de un proceso determinado.

En cualquier caso, con la información que brindas -ya un clásico en usuarios nuevos- poco más que esto se te puede responder.
Bien, disculpen por ser poco especifico. primero que nada agradecerles por la atencion a mi pregunta.

ahora con respecto a lo que estaba preguntando. Lo que pasa es que cuento con un servidor a donde varios usuarios se conectan mediante un programa para la administracion de ventas, inventarios. etc. sin embargo tengo un numero limitado de licencias para todas las personas que se conectan a tra vez de este programa. Lo que quiero evitar es que los usuarios puedan abrir mas de dos sesiones simultaneas en cada maquina que cuantan.


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

Re: controlar el numero de ejecuciones simultaneas de un programa

Mensaje por neurus » Mar Jul 26, 2016 12:07 am

La cuestión es ¿dónde hace falta ejercer el control? ¿En las pc's cliente o en el servidor?

Si el tema es en las pc's cliente, bastaría con reemplazar lo que sea que usan para ejecutar el programa -un comando o un acceso directo- por un script que lance el programa y abra un contador, sume 1 con cada ejecución o reste 1 con cada cierre. Si el contador está en dos, en lugar de lanzar el programa lance un mensaje (dialog o zenity según el caso), avisándole al usuario que ya tiene dos instancias abiertas.

En este enlace hay un ejemplo para impedir la ejecución de más de una instancia.

El ejecutable del programa tal vez deberías guardarlo con otro nombre, que sea llamado desde tu script, que tendrá el nombre del ejecutable original.

Si el control debe ejercerse en el servidor, vas a tener que averiguar unos cuantos datos: puertos utilizados, tipo de paquetes, y leer algo sobre iptables y, por qué no, netcat.
Frank461
Forista Nuevo
Forista Nuevo
Mensajes: 4
Registrado: Sab Jul 23, 2016 8:38 pm

Re: controlar el numero de ejecuciones simultaneas de un programa

Mensaje por Frank461 » Mar Jul 26, 2016 12:14 am

neurus escribió:La cuestión es ¿dónde hace falta ejercer el control? ¿En las pc's cliente o en el servidor?

Si el tema es en las pc's cliente, bastaría con reemplazar lo que sea que usan para ejecutar el programa -un comando o un acceso directo- por un script que lance el programa y abra un contador, sume 1 con cada ejecución o reste 1 con cada cierre. Si el contador está en dos, en lugar de lanzar el programa lance un mensaje (dialog o zenity según el caso), avisándole al usuario que ya tiene dos instancias abiertas.

En este enlace hay un ejemplo para impedir la ejecución de más de una instancia.

El ejecutable del programa tal vez deberías guardarlo con otro nombre, que sea llamado desde tu script, que tendrá el nombre del ejecutable original.

Si el control debe ejercerse en el servidor, vas a tener que averiguar unos cuantos datos: puertos utilizados, tipo de paquetes, y leer algo sobre iptables y, por qué no, netcat.

Muchas gracias neurus, a eso quiero llegar, al control de las pcs clientes para que no puedan tener mas de cierta cantidad de sesiones abiertas. Ahora con tan solo poner ese contador al lanzador de programa podria evitar que se ejecuten varias sesiones, o debo hacer un script como menciona el ejemplo??



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

Re: controlar el numero de ejecuciones simultaneas de un programa

Mensaje por neurus » Mar Jul 26, 2016 12:26 am

Es que el contador es parte del script. Me temo que no entendés de qué estoy hablando.

Yo hablé del contador, para contar dos instancias del programa. En el enlace que te pasé, hay un script más simple, que impide más de una instancia del programa.

Digamos que tu programa se llama así, programa. El ejecutable es /usr/bin/programa. Lo renombrás a /usr/bin/programa.original

Usando de base el script del enlace, quedaría:

Código: Seleccionar todo

#!/bin/bash
  LOCK_FILE=/tmp/script.programa.lock
  
   if [[ ! -e $LOCK_FILE ]]; then
       touch $LOCK_FILE
  
        /usr/bin/programa.original

       rm -f $LOCK_FILE
   else
      echo "Una copia anterior de este script sigue corriendo"
  fi
Guardás ese script como /usr/bin/programa, y le das permisos de ejecución. A partir de ese momento, ejecutando /usr/bin/programa, lo que se dispara es el script que a su vez chequea si hay o no otra instancia abierta. Si no la hay, lanza el programa original.

En caso de que alguna vez se cuelgue el programa -porque puede pasar- y no se borre el archivo de desbloqueo, deberías borrarlo como root: rm -rf /tmp/script.programa.lock, o reiniciar la máquina.

Para permitir dos instancias, en lugar de ese script habría que armar uno que cree un contador (puede ser en un archivo de texto) y le sume 1 al contenido cada vez que se abre el programa (en lugar de crear el archivo .lock) y reste 1 cada vez que se cierre (en lugar de borrar el archivo .lock). En caso de que el valor del contador sea 2, enviar mediante un echo (si es consola) o mediante zenity, (si es X) el mensaje: ya hay dos instancias de este programa abiertas.
Frank461
Forista Nuevo
Forista Nuevo
Mensajes: 4
Registrado: Sab Jul 23, 2016 8:38 pm

Re: controlar el numero de ejecuciones simultaneas de un programa

Mensaje por Frank461 » Mar Jul 26, 2016 3:28 pm

neurus escribió:Es que el contador es parte del script. Me temo que no entendés de qué estoy hablando.

Yo hablé del contador, para contar dos instancias del programa. En el enlace que te pasé, hay un script más simple, que impide más de una instancia del programa.

Digamos que tu programa se llama así, programa. El ejecutable es /usr/bin/programa. Lo renombrás a /usr/bin/programa.original

Usando de base el script del enlace, quedaría:

Código: Seleccionar todo

#!/bin/bash
  LOCK_FILE=/tmp/script.programa.lock
  
   if [[ ! -e $LOCK_FILE ]]; then
       touch $LOCK_FILE
  
        /usr/bin/programa.original

       rm -f $LOCK_FILE
   else
      echo "Una copia anterior de este script sigue corriendo"
  fi
Guardás ese script como /usr/bin/programa, y le das permisos de ejecución. A partir de ese momento, ejecutando /usr/bin/programa, lo que se dispara es el script que a su vez chequea si hay o no otra instancia abierta. Si no la hay, lanza el programa original.

En caso de que alguna vez se cuelgue el programa -porque puede pasar- y no se borre el archivo de desbloqueo, deberías borrarlo como root: rm -rf /tmp/script.programa.lock, o reiniciar la máquina.

Para permitir dos instancias, en lugar de ese script habría que armar uno que cree un contador (puede ser en un archivo de texto) y le sume 1 al contenido cada vez que se abre el programa (en lugar de crear el archivo .lock) y reste 1 cada vez que se cierre (en lugar de borrar el archivo .lock). En caso de que el valor del contador sea 2, enviar mediante un echo (si es consola) o mediante zenity, (si es X) el mensaje: ya hay dos instancias de este programa abiertas.
Enterado, me tocara investigar un poco mas para realizar la programacion que me sugieres, creo q el punto "dificil" para mi, es la programacion para que el script reconosca cuantas sesiones se abres y cierran de un mismo programa.

muchas gracias por toda tu ayuda


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

Re: controlar el numero de ejecuciones simultaneas de un programa

Mensaje por neurus » Mié Jul 27, 2016 12:01 am

Una forma sencilla es contando la cantidad de procesos iguales que hay en el sistema.

Algo así:

Código: Seleccionar todo

#!/bin/bash
programa=/ruta/al/ejecutable

	if [ $(ps aux|grep $programa|wc -l) -gt 2 ]; then
            echo "ya hay más de una instancia"
 	  else 
        $programa
  fi
exit
donde programa es, obviamente, tu programa. Que no sabemos si funciona en consola, en ventana o en realidad virtual.
Hice el script porque me pareció interesante de hacer, pero la verdad es que me aburrí de imaginar datos.

Saludos.
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje