2016-07-27 19 views
0

Ich habe ein paar ältere Beiträge gesehen, die das fragen, aber keine Antworten. Hoffentlich kann jemand, der die Lösung kennt, helfenSupervisord Restart Gruppe, wenn ein Prozess abstürzt/getötet wird

Wenn eine Supervisord Prozessgruppe hat ein Mitglied untergeht, ist es möglich, alle Mitglieder in dieser Gruppe neu zu starten?

Alternativ könnte ich wahrscheinlich einen EventListener machen, um die Gruppe neu zu starten, aber ich hatte auf eine elegantere Lösung von Supervisord gehofft.

Danke!

Antwort

1

Als temporäre Lösung, kann man die folgenden Schritte aus

Folgendes Ihre conf Datei hinzufügen:

; the below section must remain in the config file for RPC 
; (supervisorctl/web interface) to work, additional interfaces may be 
; added by defining them in separate rpcinterface: sections 
[rpcinterface:supervisor] 
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface 

; Event listener, on any kid going down, restart all the children 
[eventlistener:good_listener] 
command=python /path/to/python_script.py 
events=PROCESS_STATE 

dann das Skript:

#!/usr/bin/python 
import sys 
from supervisor.childutils import listener 
from subprocess import call 

def write_stderr(s): 
    sys.stderr.write(s) 
    sys.stderr.flush() 

def main(): 
    while 1: 
     cmd_msg, cmd_body = listener.wait(sys.stdin, sys. 

     if 'eventname' in cmd_msg: 
     if cmd_msg['eventname'] == 'PROCESS_STATE_EXITED': 
      write_stderr('Process has quit\n') 
      call(["supervisorctl", "restart", "all"]) 

     listener.ok(sys.stdout) 

if __name__ == '__main__': 
    main() 

Dies wird tun, was Sie wollen aber es ist nicht der beste Weg Dinge zu tun (imo).