2016-03-21 13 views
1

Ich versuche monit für die Überwachung der ffmpeg Prozess verwenden. Dazu habe ich zuerst ein Bash-Skript erstellt, das 3 Argumente hat (Start, Stop und Restart). Wenn ich das Skript manuell vom Terminal (./thisBashScript start, ./thisBashScript stop and ./thisBashScript restart) aus starte, funktioniert alles perfekt wie es entworfen wurde. Der Prozess startet, erstellt und speichert die aktuelle Prozess-ID in einer PID-Datei. Danach, wenn ich den Prozess stoppen will, nimmt es die aktuelle PID-Datei und und tötet den Prozess mit der gegebenen PID. Neustarts funktioniert auch gut, zuerst stoppt es und danach startet der Prozess.Neustart ffmpeg Prozess mit monit

Das Problem

I monit zur Überwachung des Prozesses für den Fall, es geht nach unten installiert. Ich konfigurierte, um den Prozess genau zu überprüfen, wie ich Nginx konfigurierte, dass ausgezeichnete mit Monit funktioniert.

Nach, wenn ich den Prozess mit dem Befehl ./thisBashScript start starten monit beginnt Überwachung. Im Monit-Status wird der Prozess ffmpeg als ausgeführt angezeigt. Nachdem ich den Prozess manuell mit dem Prozess "pid of ffmpeg" beendet habe, um zu testen, ob monit den Prozess neu startet, wird dies nicht ausgeführt. Obwohl die neue PID in /var/run/ffmpeg.pid erstellt und gespeichert wird.

Hier sind die monit Protokolle:

[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 

Ich habe folgende Bash-Skript:

#!/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 

Dieses Bash-Skript 3 Argumente annehmen kann (Start, Neustart und Stopp)

  • start (es startet den Befehl ffmpeg, der ein Video auf einem nginx-rtmp-Server streamt);

  • stop (es stoppt den Befehl ffmpeg);

  • Neustart (es stoppt und startet dann ffmpeg Befehl);

Hier ist meine monit Konfiguration

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

Wie wissen Sie es nicht anspringt? Überprüfen Sie diese für Monit-Debugging-Tipps: http://StackOverflow.com/questions/3356476/debugging-monit, https://mmonit.com/wiki/Monit/FAQ#execution – dekkard

Antwort

0

Das Problem durch die Schaffung eines Symlink gelöst wurde:

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