[PYTHON] Versuchen Sie, über XML RPC eine Verbindung zu Supervisord herzustellen, um das Programm zu starten / zu stoppen

Ich wollte den Prozess auf dem Supervisor von einem Python-Programm aus ausführen, also habe ich die XMLRPC-Schnittstelle ausprobiert.

Vorbereitung

supervisord.conf

Aktivieren Sie "inet_http_server".

[inet_http_server]         ; inet (TCP) server disabled by default
port=127.0.0.1:9001        ; (ip_address:port specifier, *:port for all iface)
;username=user              ; (default is no username (open server))
;password=123               ; (default is no password (open server))

[include]
files = conf.d/*.ini

conf.d/simplehttp.ini

Dies ist nicht wichtig, aber nur für den Fall. Einstellungen auf der Programmseite. Da es von virtualenv betrieben wird, fügen Sie die Einstellung "Umgebung" hinzu. Das Programm selbst ruft einfach den Standardmodul einfachen HTTP-Server auf.

[program:simplehttp]
command=python -m SimpleHTTPServer ; the program (relative uses PATH, can take args)
process_name=%(program_name)s ; process_name expr (default %(program_name)s)
numprocs=1                    ; number of processes copies to start (def 1)
directory=/tmp                ; directory to cwd to before exec (def no cwd)
autostart=true                ; start at supervisord start (default: true)
autorestart=unexpected        ; whether/when to restart (default: unexpected)
stdout_logfile=/tmp/simplehttp.stdout ; stdout log path, NONE for none; default AUTO
stderr_logfile=/tmp/simplehttp.stderr ; stderr log path, NONE for none; default AUTO
environment=PATH=/Users/shrkw/.virtualenv/cpython-275/bin ; process environment additions (def no adds)

Manipulieren

Die Einführung ist unter http://supervisord.org/api.html geschrieben, daher sollten Sie dort nachsehen.

Das Folgende wird von IPython aus betrieben.

Stellen Sie eine Verbindung zur XMLRPC-Schnittstelle her

In [1]: import xmlrpclib In [2]: server = xmlrpclib.ServerProxy('http://localhost:9001')

Überprüfen Sie die Methode

In [6]: server.system.listMethods() Out[6]: ['supervisor.addProcessGroup', 'supervisor.clearAllProcessLogs', 'supervisor.clearLog', 'supervisor.clearProcessLog', 'supervisor.clearProcessLogs', 'supervisor.getAPIVersion', 'supervisor.getAllConfigInfo', 'supervisor.getAllProcessInfo', 'supervisor.getIdentification', 'supervisor.getPID', 'supervisor.getProcessInfo', 'supervisor.getState', 'supervisor.getSupervisorVersion', 'supervisor.getVersion', 'supervisor.readLog', 'supervisor.readMainLog', 'supervisor.readProcessLog', 'supervisor.readProcessStderrLog', 'supervisor.readProcessStdoutLog', 'supervisor.reloadConfig', 'supervisor.removeProcessGroup', 'supervisor.restart', 'supervisor.sendProcessStdin', 'supervisor.sendRemoteCommEvent', 'supervisor.shutdown', 'supervisor.startAllProcesses', 'supervisor.startProcess', 'supervisor.startProcessGroup', 'supervisor.stopAllProcesses', 'supervisor.stopProcess', 'supervisor.stopProcessGroup', 'supervisor.tailProcessLog', 'supervisor.tailProcessStderrLog', 'supervisor.tailProcessStdoutLog', 'system.listMethods', 'system.methodHelp', 'system.methodSignature', 'system.multicall']

Überprüfen Sie den Status aller laufenden Prozesse

In [7]: server.supervisor.getAllProcessInfo() Out[7]: [{'description': 'pid 6624, uptime 0:09:45', 'exitstatus': 0, 'group': 'simplehttp', 'logfile': '/tmp/simplehttp.stdout', 'name': 'simplehttp', 'now': 1412565184, 'pid': 6624, 'spawnerr': '', 'start': 1412564599, 'state': 20, 'statename': 'RUNNING', 'stderr_logfile': '/tmp/simplehttp.stderr', 'stdout_logfile': '/tmp/simplehttp.stdout', 'stop': 0}]

Identifizieren Sie den Prozessnamen und überprüfen Sie den Status des Prozesses

In [10]: server.supervisor.getProcessInfo('simplehttp') Out[10]: {'description': 'pid 6624, uptime 0:10:51', 'exitstatus': 0, 'group': 'simplehttp', 'logfile': '/tmp/simplehttp.stdout', 'name': 'simplehttp', 'now': 1412565250, 'pid': 6624, 'spawnerr': '', 'start': 1412564599, 'state': 20, 'statename': 'RUNNING', 'stderr_logfile': '/tmp/simplehttp.stderr', 'stdout_logfile': '/tmp/simplehttp.stdout', 'stop': 0}

Stoppen Sie den Prozess

In [11]: server.supervisor.stopProcess('simplehttp') Out[11]: True

Überprüfen Sie den Status des Prozesses, um festzustellen, ob er ordnungsgemäß gestoppt wurde.

In [12]: server.supervisor.getProcessInfo('simplehttp') Out[12]: {'description': 'Oct 05 11:15 PM', 'exitstatus': -1, 'group': 'simplehttp', 'logfile': '/tmp/simplehttp.stdout', 'name': 'simplehttp', 'now': 1412565327, 'pid': 0, 'spawnerr': '', 'start': 1412564599, 'state': 0, 'statename': 'STOPPED', 'stderr_logfile': '/tmp/simplehttp.stderr', 'stdout_logfile': '/tmp/simplehttp.stdout', 'stop': 1412565323}

Es hörte auf, weil es "gestoppt" war.

Führen Sie den Prozess aus

In [13]: server.supervisor.startProcess('simplehttp') Out[13]: True

Ich konnte weitermachen.

Recommended Posts

Versuchen Sie, über XML RPC eine Verbindung zu Supervisord herzustellen, um das Programm zu starten / zu stoppen
So starten Sie die erste Projektion
Schreiben Sie ein Programm, das das Programm missbraucht und 100 E-Mails sendet
Versuchen Sie, das Thema Pelican vorzustellen
Probieren Sie Cython in kürzester Zeit aus
Der schnellste Weg, EfficientNet auszuprobieren
Der einfachste Weg, PyQtGraph auszuprobieren
Versuchen Sie, so viel wie möglich mit dem Beispielprogramm des Schnellstarts der Google Spreadsheet API (v4) zu kratzen
Versuchen Sie, sich der Teilsumme zu stellen
Python Amateur versucht die Liste zusammenzufassen ①
Verschiedene Kommentare im Programm zu schreiben
Versuchen Sie, das Programm "FORTRAN77 Numerical Computing Programming" auf C und Python zu portieren (Teil 1).
Versuchen Sie, das Programm "FORTRAN77 Numerical Computing Programming" auf C und Python zu portieren (Teil 3).
Versuchen Sie, das Programm "FORTRAN77 Numerical Computing Programming" auf C und Python zu portieren (Teil 2).