Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
wiki2:supervisor [2015/01/21 09:23] alfred [Configure] |
wiki2:supervisor [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 15: | Línea 15: | ||
| </code> | </code> | ||
| + | ==== Start\Stop the service ==== | ||
| + | <code> | ||
| + | $ service supervisor stop | ||
| + | $ service supervisor start | ||
| + | </code> | ||
| ==== Management ==== | ==== Management ==== | ||
| * supervisorctl status | * supervisorctl status | ||
| * supervisorctl start process | * supervisorctl start process | ||
| * supervisorctl stop process | * supervisorctl stop process | ||
| + | |||
| + | ==== Adding programs ==== | ||
| + | Add a configuration file .conf in ''/etc/supervisor/conf.d'' with a content similar to: | ||
| + | <code> | ||
| + | [program:cat] | ||
| + | command=/bin/cat | ||
| + | process_name=%(program_name)s | ||
| + | numprocs=1 | ||
| + | directory=/tmp | ||
| + | umask=022 | ||
| + | priority=999 | ||
| + | autostart=true | ||
| + | autorestart=true | ||
| + | startsecs=10 | ||
| + | startretries=3 | ||
| + | exitcodes=0,2 | ||
| + | stopsignal=TERM | ||
| + | stopwaitsecs=10 | ||
| + | user=chrism | ||
| + | redirect_stderr=false | ||
| + | stdout_logfile=/a/path | ||
| + | stdout_logfile_maxbytes=1MB | ||
| + | stdout_logfile_backups=10 | ||
| + | stdout_capture_maxbytes=1MB | ||
| + | stderr_logfile=/a/path | ||
| + | stderr_logfile_maxbytes=1MB | ||
| + | stderr_logfile_backups=10 | ||
| + | stderr_capture_maxbytes=1MB | ||
| + | environment=A="1",B="2" | ||
| + | serverurl=AUTO | ||
| + | </code> | ||
| + | === After adding a program === | ||
| + | <code> | ||
| + | $ supervisorctl reread | ||
| + | $ supervisorctl update | ||
| + | </code> | ||
| + | ===== Eventos ===== | ||
| + | |||
| + | Los eventos en Supervisor son mensajes de un tipo X que lanza Supervisord. Los posibles actualmente son: | ||
| + | http://supervisord.org/events.html#event-types | ||
| + | |||
| + | Para ello sólo has de definir un listener (que no es más que otro programa) para supervisor. Se le dice qué programa es el receptor y qué eventos: | ||
| + | <code> | ||
| + | [eventlistener:mylistener] | ||
| + | command=my_custom_listener.py | ||
| + | events=PROCESS_STATE,TICK_60 | ||
| + | </code> | ||
| + | |||
| + | El código de un listener puede ser el siguiente ( :!: date cuenta que sigue un protocolo de ''OK'' -> ''READY''): | ||
| + | <code python> | ||
| + | import sys | ||
| + | |||
| + | def write_stdout(s): | ||
| + | sys.stdout.write(s) | ||
| + | sys.stdout.flush() | ||
| + | |||
| + | def write_stderr(s): | ||
| + | sys.stderr.write(s) | ||
| + | sys.stderr.flush() | ||
| + | |||
| + | def main(): | ||
| + | while 1: | ||
| + | write_stdout('READY\n') # transition from ACKNOWLEDGED to READY | ||
| + | line = sys.stdin.readline() # read header line from stdin | ||
| + | write_stderr(line) # print it out to stderr | ||
| + | headers = dict([ x.split(':') for x in line.split() ]) | ||
| + | data = sys.stdin.read(int(headers['len'])) # read the event payload | ||
| + | write_stderr(data) # print the event payload to stderr | ||
| + | write_stdout('RESULT 2\nOK') # transition from READY to ACKNOWLEDGED | ||
| + | |||
| + | if __name__ == '__main__': | ||
| + | main() | ||
| + | import sys | ||
| + | </code> | ||
| + | |||
| + | [[ http://pypi.python.org/pypi/superlance|Superlance]] es un grupo de listeners ya programados que pueden ser utilizados. | ||