Перезапуск процесса ffmpeg с помощью monit

Я пытаюсь использовать 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" 

person Chris    schedule 21.03.2016    source источник
comment
Откуда вы знаете, что он не запускается? Ознакомьтесь с советами по отладке монитора: stackoverflow.com/questions/3356476/debugging-monit, mmonit.com/wiki/Monit/FAQ#execution   -  person dekkard    schedule 21.03.2016


Ответы (1)


Проблема была решена созданием символической ссылки:

ln -s /opt/intel/mediasdk/lib64/iHD_drv_video.so /usr/local/lib/dri/i965_drv_video.so
person Chris    schedule 21.03.2016