====== Supervisor ======
===== Basics =====
==== Install ====
sudo apt-get install supervisor
==== Configure ====
In path ''/etc/supervisor/supervisord.conf'' we can configure it for any user:
[unix_http_server]
;file=/var/run/supervisor.sock ; (the path to the socket file)
file=/tmp/supervisor.sock ; (the path to the socket file)
chmod=0777 ; sockef file mode (default 0700)
==== Start\Stop the service ====
$ service supervisor stop
$ service supervisor start
==== Management ====
* supervisorctl status
* supervisorctl start process
* supervisorctl stop process
==== Adding programs ====
Add a configuration file .conf in ''/etc/supervisor/conf.d'' with a content similar to:
[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
=== After adding a program ===
$ supervisorctl reread
$ supervisorctl update
===== 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:
[eventlistener:mylistener]
command=my_custom_listener.py
events=PROCESS_STATE,TICK_60
El código de un listener puede ser el siguiente ( :!: date cuenta que sigue un protocolo de ''OK'' -> ''READY''):
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
[[ http://pypi.python.org/pypi/superlance|Superlance]] es un grupo de listeners ya programados que pueden ser utilizados.