Surveiller un processus

De Centre de Ressources Numériques - Labomedia
Révision de 29 novembre 2014 à 13:32 par Olivier (discussion | contributions)

(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

Dans le cadre d'une installation numérique non stable (c'est à dire tout le temps), il est très utile, voire indispensable, de pouvoir surveiller un processus par son nom pour pour voir le relancer s'il n'est plus exécuté.

Nous utilisons pour cela un petit script en python proposé par Sam & Max :

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# vim: ai ts=4 sts=4 et sw=4
 
"""
    check if script is running else relaunch
"""
 
import sys
import os
from subprocess import Popen, call, PIPE
 
 
SUCCESS_EXIT_CODE=0
ERR_PS_SCRIPT_RUNNING=3
ERR_PID_SCRIPT_RUNNING=4
 
def check_ps_cmd(script_name):
    try:
        p1 = Popen(["ps", "auxww"], stdout=PIPE)
        p2 = Popen(["grep", script_name], stdin=p1.stdout, stdout=PIPE)
        p3 = Popen(["grep", "-v", "grep"], stdin=p2.stdout, stdout=PIPE)
        output = p3.communicate()[0]
        return output
    except Exception, e:
        print >>sys.stderr, "Execution failed:", e
        return None
 
 
# process to check
if not check_ps_cmd('XXXXXXXXX'):
    print "Rien ne va plus, mais tout va bien aller..."
    retcode = call("YYYYYYYYY", shell=True)
 
# add here new processes to check...
  • XXXXXXXXX est à remplacer par le nom du processus que vous voulez surveiller.
  • YYYYYYYYY est à remplacer par la commande que vous voulez exécuter si le processus n'est pas trouvé.

Pour info, la commande ps auxww permet de lister tous les processus sans être limité aux 80 premiers caractères.

Il ne vous reste plus qu'à ajouter l’exécution de ce script dans la crontab et zou :

crontab -e
@reboot python /home/chezmoi/est_ce_que_tout_va_bien.py
0 */2 * * * python /home/chezmoi/est_ce_que_tout_va_bien.py

La première ligne lance le script au démarrage de l'ordinateur, donc lance l'install qui est forcément éteinte.

La seconde check toute les 2 heures.

Nommer un processus

Un petit coup de :

pip install setproctitle

Puis dans un script python :

import setproctitle

Pour donner un nom cool à votre processus

setproctitle.setproctitle("Ouais_bebe")

Ou pour obtenir le nom actuel de votre processus

setproctitle.getproctitle()