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"
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