Ответ 1
Проблема
Как вы видите в примере с memmon, supervisord не выполняет memmon -a 200MB -m [email protected]
при каждом событии. Скорее, он запускает этот прослушиватель событий один раз (или, возможно, несколько раз, если вы настраиваете пул), а затем отправляет каждое новое событие через стандартный ввод существующего процесса.
Решение
Следовательно, вам действительно нужно найти или написать совместимый с супервизором приемник событий для каждого дополнительного типа возможностей, которые вы хотите задействовать в событиях.
Пример способа реализации
Настройте конфигурацию и напишите слушателю
написать раздел о событиях supervisord.cfg
[eventlistener:passthru]
command=/tmp/simple.py /bin/date -u +"%%s %%S:%%H:%%d:%%m"
events=TICK_60
(note- экранирование % для configParser)
написать обработчик событий simple.py
Создайте этот обработчик simple.py, внеся изменения в примерный прослушиватель из документов, чтобы он выполнял свой первый аргумент со всеми оставшимися аргументами:
#! /usr/bin/python
import sys
import subprocess
def write_stdout(s):
sys.stdout.write(s)
sys.stdout.flush()
def write_stderr(s):
sys.stderr.write(s)
sys.stderr.flush()
def main(args):
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
res = subprocess.call(args, stdout=sys.stderr); # don't mess with real stdout
write_stderr(data)
write_stdout('RESULT 2\nOK') # transition from READY to ACKNOWLEDGED
if __name__ == '__main__':
main(sys.argv[1:])
import sys
Убедитесь, что конфигурация супервизора работает
$ supervisorctl [-c cfg]
supervisor> status
passthru RUNNING pid 4471, uptime 0:00:32
supervisor> tail passthru
OKREADY
RESULT 2
OKREADY
...
supervisor> tail passthru stderr
supervisor> tail passthru stderr
ver:3.0 server:supervisor serial:0 pool:passthru poolserial:0 eventname:TICK_60 len:15
1451411161 01:17:29:12 <--- output
when:1451411160ver:3.0 server:supervisor serial:1 pool:passthru poolserial:1 eventname:TICK_60 len:15
1451411220 00:17:29:12 <--- output
when:1451411220
Теперь date -u +"%s %S:%H:%d:%m"
работает каждые 60 секунд.
Обмен в нужной команде
создать исполняемый скрипт
/tmp/hiworld.php:
#! /usr/bin/php
<?= "hiya\n";
(chmod +x...)
изменить аргументы слушателя в supervisord.cfg
[eventlistener:passthru]
command=/tmp/simple.py /tmp/hiworld.php
;stdout_logfile=/tmp/passthru
events=TICK_60
;autorestart=true
;startsecs=0
перезагрузите диспетчер и проверьте (кажется, перечитать не обнаружит это изменение)
supervisor> reload
Really restart the remote supervisord process y/N? y
Restarted supervisord
supervisor> status
passthru RUNNING pid 6017, uptime 0:00:10
supervisor> tail passthru stderr
supervisor> status
passthru RUNNING pid 6017, uptime 0:00:21
supervisor> status
passthru RUNNING pid 6017, uptime 0:01:01
supervisor> tail passthru stderr
ver:3.0 server:supervisor serial:316 pool:passthru poolserial:0 eventname:TICK_60 len:15
hiya
when:1418926740
supervisor>
End
Теперь нужная команда выполняется каждые 60 секунд. Теперь вы читаете, чтобы настроить детали разрешений, местоположений, журналов и т.д.