Я пытаюсь использовать monit для мониторинга процесса ffmpeg. Для этого я сначала создал сценарий bash, который имеет 3 аргумента (запуск, остановка и перезапуск). Когда я запускаю сценарий вручную с терминала (./thisBashScript start, ./thisBashScript stop and ./thisBashScript restart)
, все работает отлично, как он был разработан. Процесс запускается, создает и сохраняет текущий идентификатор procees в файл pid. После того, как я хочу остановить процесс, он принимает текущий файл pid и убивает процесс с данным pid. Перезапуск также отлично работает, сначала он останавливается и после запуска процесса.Перезапуск процесса ffmpeg с использованием monit
Проблема
Я установил Monit для мониторинга процесса в случае, если она идет вниз. Я настроил проверку процесса точно так, как я настроил nginx, что отлично работает с monit.
После того, как я запустил процесс с помощью команды ./thisBashScript start
monit начинает мониторинг. В статусе monit процесс ffmpeg отображается как работающий. После того, как я убил процесс вручную, используя pid процесса ffmpeg, чтобы проверить, перезапускает ли monit этот процесс, он не может этого сделать. Несмотря на то, что новый pid создается и сохраняется в /var/run/ffmpeg.pid
.
Вот MONIT журналы:
[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
У меня есть следующий Баш скрипт:
#!/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
Этот Баш скрипт может принимать 3 аргумента (запуска, перезапуска и остановки)
start (он запускает команду ffmpeg, которая передает видео на сервер nginx rtmp);
stop (останавливает команду 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"
Как вы знаете, он не запускается? Проверьте их для подсказок отладки monit: http://stackoverflow.com/questions/3356476/debugging-monit, https://mmonit.com/wiki/Monit/FAQ#execution – dekkard