Lanzar ambiente grafico desde CRON
Instale una aplicación en Python en ua Rasberri Pi3, eventualmente y
sin ninguna causa aparente el proceso se cancelaba, dicho proceso es en
ambiente gráfico, para un control de acceso, desde luego no es nada
agradable que necesiten entrar y salir y el dicho dispositivo se niegue a
cooperar.
Aunque posteriormente se logro determinar que se debía a que en el edificio
apagaban todos los aires acondicionados y por lo tanto el dispositivo en la
mañana estaba como una plancha no operaba bien, la solución un cooler y
se acabo el problema, pero mientras fue necesario implementar un script
que se diera cuenta que el servicio estaba fuera y que ademas lanzara el ambiente gráfico de nuevo, mientras lográbamos determinar cual era la causa
del problema
Para el efecto se implemento un simple if que verificara que el python estaba
funcionando.
El proceso es similar para saber si algun programa esta funcionado, como java,
perl, firefox etc.
PROCESOSH=`ps -e | grep -o "python"`
if [ -z ${PROCESOSH} ]
else
fi
Si la respuesta que esta linea estaba en blanco , lanzaba el servidor
gráfico de nuevo.
Estas pocas lineas permiten lanzar el servidor gráfico con su respectivo
script python desde modo consola, mas propiamente desde un cron.
****************************************************************************
Insertar la linea crontab , mediante
$ crontab -e
* * * * * /usr/bin/sos.sh
****************************************************************************
Nota : No usar sudo para programar el cron, si lo hace , la tarea se
ejecutara como usuario ROOT que no tiene servidor gráfico porque esta
en el usuario PI.
Tener en cuenta que todo se hizo usando
# ssh -y pi@192.68.1.12
Replazar 192.168.1.12 por su IP de conexión a la rasberri.
Para que todo el proceso se vincule al usuario pi
-------------------------------------------------------------------------------------------------------------------------
Lanzar el servidor gráfico.
export DISPLAY=:0.0
export XAUTHORITY=/home/pi/.Xauthority
xauth add $DISPLAY . hexkey
Me cambio a la carpeta donde tengo mi script de interés.
cd /home/pi/sthor/nfc
Ejecuto el programa python usando la variable exportada en DISPLAY.
Redirecciono la salida de error a un archivo en la carpeta /tmp
para verificar que estaba ocacionado el error.
python NfcG.py -display "$DISPLAY" 2>>/tmp/pythonStatus.txt
****************************************************************************
Guion /usr/bin/sos.sh
recordar permisos de ejecucion
$ sudo chmod ugo+wrx /usr/bin/sos.sh
#****************************************************************************
# sos.sh
#****************************************************************************
PROCESOSH=`ps -e | grep -o "python"`
if [ -z ${PROCESOSH} ]
then
echo `date` " no hay procesos corriendo..." 1>>/tmp/pythonStatus.txt
export DISPLAY=:0.0
export XAUTHORITY=/home/pi/.Xauthority
xauth add $DISPLAY . hexkey
cd /home/pi/sthor/nfc
python NfcG.py -display "$DISPLAY" 2>>/tmp/pythonStatus.txt
else
if [ ${PROCESOSH} = "python" ]
then
echo "servidor esta ok"
fi
fi
Aunque posteriormente se logro determinar que se debía a que en el edificio
apagaban todos los aires acondicionados y por lo tanto el dispositivo en la
mañana estaba como una plancha no operaba bien, la solución un cooler y
se acabo el problema, pero mientras fue necesario implementar un script
que se diera cuenta que el servicio estaba fuera y que ademas lanzara el ambiente gráfico de nuevo, mientras lográbamos determinar cual era la causa
del problema
Para el efecto se implemento un simple if que verificara que el python estaba
funcionando.
El proceso es similar para saber si algun programa esta funcionado, como java,
perl, firefox etc.
PROCESOSH=`ps -e | grep -o "python"`
if [ -z ${PROCESOSH} ]
else
fi
Si la respuesta que esta linea estaba en blanco , lanzaba el servidor
gráfico de nuevo.
Estas pocas lineas permiten lanzar el servidor gráfico con su respectivo
script python desde modo consola, mas propiamente desde un cron.
****************************************************************************
Insertar la linea crontab , mediante
$ crontab -e
* * * * * /usr/bin/sos.sh
****************************************************************************
Nota : No usar sudo para programar el cron, si lo hace , la tarea se
ejecutara como usuario ROOT que no tiene servidor gráfico porque esta
en el usuario PI.
Tener en cuenta que todo se hizo usando
# ssh -y pi@192.68.1.12
Replazar 192.168.1.12 por su IP de conexión a la rasberri.
Para que todo el proceso se vincule al usuario pi
-------------------------------------------------------------------------------------------------------------------------
Lanzar el servidor gráfico.
export DISPLAY=:0.0
Dar
permiso al sistema para accesar el usuario gráfico para mi caso deje el
que tiene por defecto o sea pi, el cookie de autorización se encuentra
en el directorio principal del usuario pi (/home/pi)
export XAUTHORITY=/home/pi/.Xauthority
xauth add $DISPLAY . hexkey
Me cambio a la carpeta donde tengo mi script de interés.
cd /home/pi/sthor/nfc
Ejecuto el programa python usando la variable exportada en DISPLAY.
Redirecciono la salida de error a un archivo en la carpeta /tmp
para verificar que estaba ocacionado el error.
python NfcG.py -display "$DISPLAY" 2>>/tmp/pythonStatus.txt
****************************************************************************
Guion /usr/bin/sos.sh
recordar permisos de ejecucion
$ sudo chmod ugo+wrx /usr/bin/sos.sh
#****************************************************************************
# sos.sh
#****************************************************************************
PROCESOSH=`ps -e | grep -o "python"`
if [ -z ${PROCESOSH} ]
then
echo `date` " no hay procesos corriendo..." 1>>/tmp/pythonStatus.txt
export DISPLAY=:0.0
export XAUTHORITY=/home/pi/.Xauthority
xauth add $DISPLAY . hexkey
cd /home/pi/sthor/nfc
python NfcG.py -display "$DISPLAY" 2>>/tmp/pythonStatus.txt
else
if [ ${PROCESOSH} = "python" ]
then
echo "servidor esta ok"
fi
fi
Comentarios
Publicar un comentario