check – Sam & Max http://sametmax.com Du code, du cul Wed, 23 Dec 2020 13:35:02 +0000 en-US hourly 1 https://wordpress.org/?v=4.9.7 32490438 Checker ses process et les relancer en cas de plantage http://sametmax.com/checker-ses-process-et-les-relancer-en-cas-de-plantage/ http://sametmax.com/checker-ses-process-et-les-relancer-en-cas-de-plantage/#comments Tue, 22 May 2012 16:55:40 +0000 http://sametmax.com/?p=672 J’ai quelques scripts qui se mettent à planter des fois, je sais que c’est parceque je les ai codé comme un gros porc mais ça m’emmerde de les refaires parceque après tout ils font ce que je leur dit de faire, c’est juste qu’ils plantent des fois.
Ceci dit j’ai aussi des applications qui ne sont pas mienne qui plantent (privoxy, tor, des fois même lighttpd) et là on est bien content que quelqu’un puisse le relancer pendant qu’on est en train de se cuiter au bar du coin.

Voici un petit script tout simple en python que je lance avec un crontab à intervalles réguliers.

Exemple pour nginx, on va rechercher le process à partir du mot clef “nginx”:

ps aux | grep nginx
root     29231  0.0  0.0  22144   948 ?        Ss   13:05   0:00 nginx: master process /usr/local/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

Dans le script ça donne:

#!/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", "aux"], 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('nginx'):
    print "Nginx dead, relaunch..."
    retcode = call("service nginx restart", shell=True)

# add here new processes to check...

On peut imaginer mettre un sendmail pour se voir notifier lors de la mort d’un process et ainsi briller en soirées mondaines lorsque votre téléphone vous bippe sous le nom de Jarvis vous avertissant de la mort prématurée de lighttpd suite à votre toute dernière super config que vous avez pris soins de mettre en prod un vendredi soir sans vous soucier de la tester et ce juste avant de partir du bureau dont la clef est dans la poche du boss qui vient de se tirer en long weekend avec sa secrétaire…

]]>
http://sametmax.com/checker-ses-process-et-les-relancer-en-cas-de-plantage/feed/ 6 672