jueves, 8 de septiembre de 2016

Lanzando un demonio

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.py

        rm -f "$lockfile"
        trap - INT TERM EXIT

        else
            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.

No hay comentarios :

Publicar un comentario