2016-03-21 4 views
1

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

Как вы знаете, он не запускается? Проверьте их для подсказок отладки monit: http://stackoverflow.com/questions/3356476/debugging-monit, https://mmonit.com/wiki/Monit/FAQ#execution – dekkard

ответ

0

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

ln -s /opt/intel/mediasdk/lib64/iHD_drv_video.so /usr/local/lib/dri/i965_drv_video.so 
Смежные вопросы