/home/www/monitor.php文件
<?php
function write_stdout($str)
{
fwrite(STDOUT, $str);
}
function write_stderr($str)
{
fwrite(STDERR, $str);
}
while (1)
{
# transition from ACKNOWLEDGED to READY
write_stdout("READY\n");
$line = fgets(STDIN);
write_stderr($line);
$line = trim($line, "\n");
$lineArr = explode(" ", $line);
$data = [];
foreach($lineArr as $key => $val) {
$arr = explode(":", $val);
if (count($arr) == 2) {
$data[$arr[0]] = $arr[1];
}
}
$line = fgets(STDIN, $data['len']);
write_stderr($line);
$line = trim($line, "\n");
$lineArr = explode(" ", $line);
$data = [];
foreach($lineArr as $key => $val) {
$arr = explode(":", $val);
if (count($arr) == 2) {
$data[$arr[0]] = $arr[1];
}
}
write_stderr(json_encode($data));
write_stdout("RESULT 2\nOK");
}
supervisor配置
[eventlistener:monitor]
command=/usr/local/php7/bin/php /home/www/monitor.php
events=PROCESS_STATE_STOPPING,PROCESS_STATE_FATAL
stdout_logfile=/var/log/supervisor/monitor.log
stderr_logfile=/var/log/supervisor/monitor_error.log
注意:write_stdout("READY\n");与write_stdout("RESULT 2\nOK");之间不能有任何如echo、var_dump、write_stdout等输出,只能用write_stderr打印信息,否则supervisor只能监听一次。
supervisor事件监听官网说明:
http://www.supervisord.org/events.html#configuring-an-event-listener