[PYTHON] Essayez de vous connecter à Supervisord via XML RPC pour démarrer / arrêter le programme

Je voulais faire fonctionner le processus sur le superviseur à partir d'un programme Python, j'ai donc essayé l'interface XMLRPC.

Préparation

supervisord.conf

Activez ʻ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

Ce n'est pas important, mais juste au cas où. Paramètres côté programme. Puisqu'il est exploité par virtualenv, ajoutez le paramètre ʻenvironment`. Le programme lui-même appelle simplement le module standard serveur HTTP simple.

[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)

Manipuler

L'introduction est écrite à http://supervisord.org/api.html, vous devriez donc y regarder.

Ce qui suit est exploité à partir d'IPython.

Connectez-vous à l'interface XMLRPC

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

Vérifiez la méthode

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']

Vérifiez l'état de tous les processus en cours d'exécution

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}]

Identifiez le nom du processus et vérifiez l'état du processus

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}

Arrêtez le processus

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

Vérifiez l'état du processus pour voir s'il s'est correctement arrêté.

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}

Il s'est arrêté parce qu'il était "STOPPED".

Exécutez le processus

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

J'ai pu reprendre.

Recommended Posts

Essayez de vous connecter à Supervisord via XML RPC pour démarrer / arrêter le programme
Comment démarrer la première projection
Ecrire un programme qui abuse du programme et envoie 100 e-mails
Essayez d'introduire le thème sur Pelican
Essayez Cython dans les plus brefs délais
Le moyen le plus rapide d'essayer EfficientNet
La façon la plus simple d'essayer PyQtGraph
Essayez de gratter autant que vous le pouvez le programme d'exemple de démarrage rapide de l'API Google Spreadsheet (v4)
Essayez de faire face à la somme partielle
Python amateur tente de résumer la liste ①
Divers commentaires à écrire dans le programme
Essayez de porter le programme «Programmation informatique numérique FORTRAN77» vers C et Python (partie 1)
Essayez de porter le programme "FORTRAN77 Numerical Computing Programming" vers C et Python (partie 3)
Essayez de porter le programme "FORTRAN77 Numerical Computing Programming" vers C et Python (partie 2)