Pasos para lanzar una script de bash en ubuntu que nos ejecutará automáticamente una script de python en caso que ésta deje de correr.
Para nuestro caso, será necesario crear el .sh y hacerlo ejecutable:
editamos/creamos con nano: sudo nano -c /directorio/running.sh
hacemos ejecutable: sudo chmod +x /directorio/running.sh
Utilizaremos la script dentro de la carpeta /demon/ en nuestro directorio, y en ella misma, tendremos la carpeta tmp donde utilizaremos un fichero vacío .lock como variable.
La script en cuestión, desarrollada hace algunos meses con un compañero para una aplicación de la raspi (Gracias Darkomen!):
lockfile=/home/ubuntu/…../demon/tmp/void.lock rm -rf /home/ubuntu/…../demon/tmp/
mkdir /home/ubuntu/……/demon/tmp/
while true
do
litems=`ls /home/ubuntu/……./demon/tmp/ | wc -l`
echo “$litems”
if [[ “$litems” == “0” ]] then
if (set -o noclobber; echo “$$” > “$lockfile”) 2> /dev/null;
then
trap ‘rm -f “$lockfile”; exit $?’ INT TERM EXIT
echo “Launching…”
python /home/ubuntu/……../server.pyrm -f “$lockfile”
trap – INT TERM EXITelse
echo “Running…”fi
fi
sleep 10
done
Importante no dejar espacio entre el signo igual y la comilla en la asignación a la variable litems del output del comando ls.
En este caso quiero dejar corriendo en el servidor la script de bash a
mano, por lo que utilizaré screen, ya que accedo al servidor por ssh
mediante putty y se cerrarían los procesos al cerrar la sesión. La
script en bash hará que la script de python sea lanzada automáticamente
cuando ésta pete.
Será necesario hacer:
screen
* Podemos dar un nombre a la sesión de screen: screen -S Misesion
y estando en el directorio del fichero:
./running.sh
Ya podemos hacer deatach de la sesión de screen (ctrl-a + ctrl-d) y cerrar la conexión con putty. Todo debería ir fino.
Comandos de utilidad:
para ver procesos python, por ejemplo: ps -e | grep python
lo mismo para screen: ps -e | grep screen
Del comando anterior nos interesa el PID si queremos matar el proceso.
ver sesiones de screen: screen -ls
Enlazarse a una de ellas que ya esté corriendo: screen -r PID.NOMBRE
tambien puede ser útil para ver qué nos consume recursos: top
para matar un proceso: sudo kill -9 PID
PID será el número del PID del proceso.