Я пытаюсь использовать monit для наблюдения за процессом ffmpeg. Для этого я сначала создал сценарий bash с 3 аргументами (запуск, остановка и перезапуск). Когда я запускаю сценарий вручную из терминала (./thisBashScript start, ./thisBashScript stop and ./thisBashScript restart )
, все работает отлично, как было задумано. Процесс запускается, создает и сохраняет текущий идентификатор процесса в файл pid. После, если я хочу остановить процесс, он берет текущий файл pid и убивает процесс с заданным pid. Перезагрузка тоже работает нормально, сначала останавливается, а потом запускает процесс.
Проблема
Я установил monit для наблюдения за процессом на случай, если он выйдет из строя. Я настроил проверку процесса точно так же, как я настроил nginx, который отлично работает с monit.
После, когда я запускаю процесс командой ./thisBashScript start
, monit запускает мониторинг. В состоянии мониторинга процесс ffmpeg отображается как запущенный. После того, как я убью процесс вручную, используя pid процесса ffmpeg, чтобы проверить, перезапускает ли процесс monit, он не может этого сделать. Несмотря на то, что новый pid создается и сохраняется в /var/run/ffmpeg.pid
.
Вот журналы мониторинга:
[EET Mar 21 12:12:37] error : 'ffmpeg' process is not running
[EET Mar 21 12:12:37] info : 'ffmpeg' trying to restart
[EET Mar 21 12:12:37] info : 'ffmpeg' start: /etc/init.d/iptv/thisBashScript
У меня есть следующий сценарий bash:
#!/bin/sh
pid_file="/var/run/ffmpeg.pid"
case "$1" in
restart)
/etc/init.d/iptv/thisBashScript stop
/etc/init.d/iptv/thisBashScript start
;;
start)
rm $pid_file
ffmpeg -i udp://@someIp:1234 -acodec libmp3lame -ac 1 -ar 44100 -ab 64k -s 640x360 -deinterlace -vcodec h264_qsv -vb 700k -f flv rtmp://someIp/applicationName/360 &
ch_pid=$!
echo "Start HLS: ffmpeg = $ch_pid";
echo $ch_pid > $pid_file
;;
stop)
echo "Stop transcoding";
kill `cat $pid_file`
;;
*)
echo "Usage: /etc/init.d/thisBashScript {start|stop|restart}"
exit 1
;;
esac
exit 0
echo $pid_file
Этот сценарий bash может принимать 3 аргумента (запуск, перезапуск и остановка)
start (запускает команду ffmpeg, которая транслирует видео на сервер nginx rtmp);
стоп (останавливает команду ffmpeg);
перезапуск (он останавливается, а затем запускает команду ffmpeg);
Вот моя конфигурация монитора
check process ffmpeg with pidfile /var/run/ffmpeg.pid
start program = "/etc/init.d/iptv/thisBashScript start"
stop program = "/etc/init.d/iptv/thisBashScript stop"