pgrep no muestra un proceso de python

¿Algo falla o no sabes como funciona? Pide ayuda aquí!
Responder
Avatar de Usuario
rbcheca
Pi Alpha
Pi Alpha
Mensajes: 18
Registrado: 10 Sep 2016, 20:11
Agradecido: 0
Agradecimiento recibido: 0

Hola, tengo un bot de telegram con python que se inicia automáticamente con raspbian, quiero hacer un script para que compruebe si el proceso del bot está ejecutándose y en caso contrario lo ejecute, por si se para por alguna razón, antes con "pgrep nombre_script" me indicaba el pid y así sabia si se estaba ejecutando, pero de buenas a primeras pgrep no me da el pid, de echo no hace nada...

Alguna idea? muchas gracias!
Avatar de Usuario
wat3r
Pi Omega
Pi Omega
Mensajes: 97
Registrado: 16 Ago 2016, 06:49
Agradecido: 0
Agradecimiento recibido: 1 vez

Por que estas llamando al código no al programa. Si pones python te sale el PID del programa .py ejecutado por python.

prep python mismo PID que hacer ps aux | grep bot.py

Enviado desde mi SM-G900F mediante Tapatalk
Avatar de Usuario
rbcheca
Pi Alpha
Pi Alpha
Mensajes: 18
Registrado: 10 Sep 2016, 20:11
Agradecido: 0
Agradecimiento recibido: 0

Ummm... no entiendo nada.

Antes tenia un script python que es el siguiente:

comando = 'pgrep casabot.py'
tuberia = os.popen(comando)
salida_estandar = tuberia.readlines()
print salida_estandar
tuberia.close()
if re.match(".*\d.*", str(salida_estandar)):
pass
else:
pb.push_note("AVISO", "Se ha detenido el bot")


Hacía un pgrep a nombre del script me daba el pid del proceso y si el pid contenia un numero es que el bot se estaba ejecutando, y si estaba vacío me mandaba un pushbullet diciendo que el bot se ha detenido.

Si hago pgrep python me da los pid de todos los scripts python que se están ejecutando, y si detengo el script, al hacer pgrep python me sigue dando el pid aunque el script no este en ejecución...
No entiendo nada...

De todas formas si conocéis otra forma de saber si un script se esta ejecutando, bienvenida sea XDD

Gracias!!
Avatar de Usuario
wat3r
Pi Omega
Pi Omega
Mensajes: 97
Registrado: 16 Ago 2016, 06:49
Agradecido: 0
Agradecimiento recibido: 1 vez

Pues nada que python es un lenguaje de programación el cual tiras de un código lo que sea.py y de un intérprete python.

Pues por much que lo intentes casabot.py no es un binario si no un código y linux no le asocia un PID. Linux le asocia un PID al intérprete que es python que lo ejecuta.
Así que pgrep casabot.py no muestra nada si mostrará pgrep python. Y mostrará un PID por cada código que tengas ejecutado en pithon.

No se si me explico

Enviado desde mi SM-G900F mediante Tapatalk
Avatar de Usuario
wat3r
Pi Omega
Pi Omega
Mensajes: 97
Registrado: 16 Ago 2016, 06:49
Agradecido: 0
Agradecimiento recibido: 1 vez

Mira @rbcheca te voy a echar un cable y te olvidas de pgrep y cosas así. Te voy a escribir un script bash shell, Este me lo he echo hoy por que yo tengo otro bot de telegram y el muy cabrito se cierra a la media hora.

En vez de buscar un PID ya que puedes tener varios programas ejecutandos con python en tu sistema lo vamos a buscar con el nombre del programa en cuestión.

Supongamos que nuestro bot programado en python está en /home/pi y se llama bot.py

Creamos un scrip con

Código: Seleccionar todo

$nano controlbot.sh
En el escribimos

Código: Seleccionar todo

#!/bin/sh
SERVICE='bot.py'
#Comprueba si el programa bot.py está ejecutandose
if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
echo "El servicio $SERVICE se esta ejecutando"
else
echo "El programa $SERVICE esta detenido, iniciando..."
python /scripts/telegram/bot.py & 
fi
Lo guardamos con control+x, y le damos a yes.

Le damos permisos de ejecución al script con

Código: Seleccionar todo

$chmod +x controlbot.sh
Y añadimos el script para que lo compruebe que bot.py se ejecuta periódicamente. Para ello usamos CRON.

Mas info sobre CRON https://es.wikipedia.org/wiki/Cron_(Unix)

Para que ejecute el script cada 20 minutos escribimos

Código: Seleccionar todo

$crontab -e
y añadimos al final del todo la linea

Código: Seleccionar todo

 */20 * * * * bash /home/pi/controlbot.sh 
Y con estos pasos el scrip cada 20 minutos comprobara si bot.py está ejecutandose y si no lo está lo ejecutará.

Un saludo

PD: Recuerda que yo he usado como ejemplo los nombres del programa en python y su ubicación de una forma genérica, tu deberías modificar esto con los nombres y la hubicaciónes de los archivos que tu tengas
Avatar de Usuario
rbcheca
Pi Alpha
Pi Alpha
Mensajes: 18
Registrado: 10 Sep 2016, 20:11
Agradecido: 0
Agradecimiento recibido: 0

Genial! pero yo bash no lo controlo nada, no se podrá hacer algo parecido en python?
koldox
Pi Alpha
Pi Alpha
Mensajes: 20
Registrado: 23 Feb 2017, 19:50
Agradecido: 0
Agradecimiento recibido: 0

Phyton es un lenguaje facilito seguro que pronto encuentras la solucion
Responder