Linux/Unix Shell Scripting - Script que comprueba y arranca programa si se detiene

   
Vista:

Script que comprueba y arranca programa si se detiene

Publicado por epicteto (9 intervenciones) el 19/08/2014 08:29:16
Hola

Tengo un programa en Python que ejecuto desde la consola mediante la instruccion:

python programa.py

El problema es que ese programa, muy pocas veces, me da un error que hace que se interrumpa. Estoy buscando ese error, pero mientras, si se detiene, tengo que estar pendiente para volver a arrancarlo mediante la instruccion señalada. Necesitaría un pequeño script o algún comando que comprobara si el programa está en marcha, y si no fuera así que ejecutara el comando anterior para arrancarlo.

No se me ocurre como poder hacerlo. ¿puede alguien darme alguna idea?

Saludos y gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Script que comprueba y arranca programa si se detiene

Publicado por Tom (253 intervenciones) el 19/08/2014 11:45:11
¿
1
2
3
4
while true
do
  python programa.py
done
?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Script que comprueba y arranca programa si se detiene

Publicado por epicteto (9 intervenciones) el 19/08/2014 12:12:06
Tom, tenía preparado algo bastante parecido a lo que me propones, pero no consigo saber como puedo controlar si el programa esta en marcha mediante su pid, ya que tengo arrancado a la vez varios python.

El pid lo tengo, ¿y luego?



Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Script que comprueba y arranca programa si se detiene

Publicado por xve (254 intervenciones) el 19/08/2014 13:52:31
Hola, si tienes su pid, haber si te puede servir este código...

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
 
PID=17172
 
# devuelve 0 si no existe dicho id
EXEC=`ps -eo pid | grep $PID | grep -v grep | wc -l`
 
if [ $EXEC -eq 0 ];then
	python programa.py
fi

Coméntanos si te sirve, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Script que comprueba y arranca programa si se detiene

Publicado por epicteto (9 intervenciones) el 19/08/2014 14:52:24
Gracias xve

El código que me pasas es perfecto para hacer una comprobación puntual de que el programa.py esté en marcha y si no es así iniciarlo; pero yo necesito incorporarlo a un bucle u otra solución para que esté comprobándolo permanentemente... teniendo en cuenta que si el código actúa e inicia el programa.py el PID cambia y es otro, y esto hay que tenerlo en cuenta para posibles nuevas arrancadas.

Supongo que será una combinación de los códigos que me habéis pasado, pero no soy capaz de encajarlo.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Script que comprueba y arranca programa si se detiene

Publicado por Tom (253 intervenciones) el 19/08/2014 15:25:02
No entiendo para qué quieres el pid ...

Si lo pones en un bucle while, simplemente cada vez que acaba se vuelve a iniciar (a no ser que el propio programe se 'daemonize' a sí mismo)... hasta que mates el propio while.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Script que comprueba y arranca programa si se detiene

Publicado por epicteto (9 intervenciones) el 19/08/2014 15:43:29
Tom, he puesto esta consulta en el foro de Python porque quizás sea más fácil la solución por ahí ... en cualquier caso intentaré explicarme mejor.

Tengo un programa en Python que ejecuto desde una consola en Linux. El programa fundamentalmente es un bucle que hace una serie de cosas, entre otras leer píxeles de la pantalla. Hay veces que se produce un error que lo interrumpe y lógicamente para ponerlo en marcha tengo que intervenir yo iniciándolo de nuevo desde la consola.

Lo que pretendo es que se ignoren esos errores (que se dan muy poco, una vez cada varias horas, y que me resulta imposible solucionar) y el programa siga ejecutándose... o que de alguna manera se reinicie sin que tenga que estar yo pendiente. Pensé que la mejor opción podría ser tener un bucle en un script en Bash que compruebe mediante el PID del proceso del programa que está en marcha, y que si no es así lo reinicie.

Necesito el PID para poder identificar ese proceso concreto porque tengo otros python corriendo a la vez.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Script que comprueba y arranca programa si se detiene

Publicado por Tom (253 intervenciones) el 19/08/2014 16:01:04
Pues sigo sin entender. ¿ Por qué no pruebas el bucle while, sin más, y comentas los problemas que surjan con él ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Script que comprueba y arranca programa si se detiene

Publicado por epicteto (9 intervenciones) el 19/08/2014 16:36:06
Bueno, vaya sorpresa. Funciona de otra manera a como me lo había imaginado. Pensaba que tenía que indicarle el PID o que iba a achicharrar el micro por tener un bucle ejecutándose indefinidamente, pero no.

Ya solo me falta encontrar una manera "elegante" de salir del bucle cuando quiera pararlo que no sea cerrar la consola que es lo que acabo de hacer. Con Ctrl+c detengo el python.. que se vuelve a iniciar indefinidamente

Gracias a todos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Script que comprueba y arranca programa si se detiene

Publicado por Tom (253 intervenciones) el 19/08/2014 16:43:24
Fácil.
Una vez que finaliza el programa, puedes ver su código de salida en $?. Si tienes suerte, el código es distinto dependiendo de la forma en que el programa finalize; Lo mejor es que hagas pruebas poniendo un echo y luego completes el código.

1
2
3
4
while true
do
  python programa.py && break; # Finalización correcta (exit 0) termina el bucle
done

o

1
2
3
4
5
while true
do
  python programa.py
  [ $? -eq 0 ] && break;
done

Por otra parte, Ctrl C repetidamente acaba matando el while.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Script que comprueba y arranca programa si se detiene

Publicado por epicteto (9 intervenciones) el 19/08/2014 17:08:38
Es perfecto

gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar