2009-05-21 4 views
3

J'ai 2 programmes serveur qui doivent être démarrés avec l'utilisation de GNU Screen. Je voudrais durcir ces serveurs contre les accidents avec un programme basé sur Python qui déclenche chaque session d'écran puis surveille le processus du serveur. Si le processus du serveur se bloque, j'ai besoin du code python pour supprimer la session d'écran superflue et redémarrer le serveur avec l'écran à nouveau.Moniteur multi-serveur/restarter automatique en python

Je suis très novice en python mais j'utilise cette opportunité pour m'enseigner. Je suis conscient que cela peut être fait dans les scripts bash. Mais je veux construire sur ce code pour les fonctionnalités futures, il doit donc être juste python.

Le pseudo-code est la suivante:

thread-one { 
    While 1: 
    start server 1 using screen 
    wait for server to end 
    end while 
} 

thread-two { 
    While 1: 
    start server 2 using screen 
    wait for server to end 
    end while 
} 
+0

Est-ce que ce sont des threads? Ou sont-ils des processus de l'enfant? –

+0

le script python (je pense) aurait besoin d'être multi-thread pour gérer le redémarrage de deux programmes distincts indépendamment. Ce sont donc des threads qui démarrent les processus enfants indépendamment. – Caedis

Répondre

5

« doivent être multi-thread pour gérer la remise en marche de deux programmes distincts »

Ne vois pas pourquoi.

import subprocess 

commands = [ ["p1"], ["p2"] ] 
programs = [ subprocess.Popen(c) for c in commands ] 
while True: 
    for i in range(len(programs)): 
     if programs[i].returncode is None: 
      continue # still running 
     else: 
      # restart this one 
      programs[i]= subprocess.Popen(commands[i]) 
     time.sleep(1.0) 
+1

Wow, je vais passer l'heure suivante à disséquer ce code pour chaque goutte d'information que je peux en tirer. Je vous remercie! – Caedis

3

Vous devriez vraiment pas exécuter le logiciel de production sur un écran. Si le serveur est redémarré, comment allez-vous le démarrer? Manuellement? Aussi je pense que vous essayez de réinventer la roue. Il y a déjà de très bons outils qui font ce dont vous avez besoin.

launchtool vous permet d'exécuter une commande fournie par l'utilisateur supervisant sa exécution à bien des égards, comme le contrôle de son environnement, le blocage signaux, connecter sa sortie, en changeant autorisations d'utilisateur et de groupe, ce qui limite utilisation des ressources , le redémarrant s'il échoue , l'exécutant en continu, en le transformant en démon, et plus encore.

.

Monit est un utilitaire open source gratuit pour la gestion et le suivi, processus, des fichiers, des répertoires et systèmes de fichiers sur un système UNIX. Monit effectue la maintenance automatique et la réparation et peut exécuter des actions causales significatives dans des situations d'erreur.

+0

Bien que le serveur soit utilisé par mes clients, il n'est pas essentiel à la mission, c'est un serveur de test pour un usage non professionnel. Les programmes serveur, bien qu'ils soient importants à suivre, ne tueront personne et ne coûteront rien à personne s'ils meurent. Le but principal de cet exercice est de créer un programme utile que je peux étendre à l'avenir tout en apprenant Python. J'ai trouvé que j'apprends mieux quand j'ai un besoin de satisfaire. Il peut y avoir des applications pour faire cela, mais cela va à l'encontre du but. – Caedis

Questions connexes