2017-01-10 1 views
0

Ich habe ähnliche Lösung wie diese Restarting ffmpeg process using monit verwendet, um meine ffmpeg Stream neu starten, falls es aus irgendeinem Grund fehlschlägt. Denken Sie daran, es ist nicht doppelt Problem/Frage, weil ich andere Probleme im Gegensatz zu dem Beispiel Frage/Lösung Restarting ffmpeg process using monit, die ich unten erklären werde. So, hier ist meine monit Konfiguration:Neustart ffmpeg Prozess mit monit wenn TOTAL CPU ist weniger als 1%

check process FFMPEGStream with pidfile PATH-to-file/streampid.pid 
    start program = "PATH-to-file/streambash.sh restart" 
    stop program = "PATH-to-file/streambash.sh stop" 
    if TOTAL CPU is less than 1% for 10 cycles then restart 

Hier ist meine streambash.sh Datei:

#!/bin/bash 
    pid_file="PATH-to-file/streampid.pid" 

    case "$1" in 
    restart) 
     PATH-to-file/streambash.sh stop 
     PATH-to-file/streambash.sh start 
      ;; 

    start) 
     rm $pid_file 
     /usr/bin/ffmpeg -i "INPUT-PATH" -c:v libx264 -b:v 900k -preset ultrafast -aspect 16:9 -s 640x376 -strict experimental -c:a aac -b:a 96k -f flv "RTMP-PATH" &> /dev/null & 
     ch_pid=$! 
     echo "Start Stream1: ffmpeg = $ch_pid"; 
     echo $ch_pid > $pid_file 
      ;; 

    stop) 
     echo "Stop ffmpeg Stream1"; 
     kill `cat $pid_file` &> /dev/null 
      ;; 

    *) 
     echo "Usage: PATH-to-file/streambash.sh {start|stop|restart}" 
     exit 1 
      ;; 

    esac 
    exit 0 
    echo $pid_file 

Monit kann die Bash-Datei erfolgreich starten, aber wenn diese Bedingung „, wenn TOTAL CPU weniger als 1 % für 10 Zyklen dann Neustart " ist in Monit-Konfiguration abgestimmt, es versucht, neu zu starten, gibt es Fehler, dass Prozess nicht ausgeführt wird. Aber tatsächlich läuft der ffmpeg-Prozess immer noch im Hintergrund und ich kann sehen, dass der Stream live auf meiner Website ist. Hier sind monit Protokolle:

[CET Jan 10 12:55:02] error : 'FFMPEGStream' total cpu usage of 0.4% matches resource limit [cpu usage>1.0%] 
    [CET Jan 10 12:55:07] error : 'FFMPEGStream' total cpu usage of 0.0% matches resource limit [cpu usage>1.0%] 
    [CET Jan 10 12:55:12] error : 'FFMPEGStream' total cpu usage of 0.0% matches resource limit [cpu usage>1.0%] 
    [CET Jan 10 12:55:17] error : 'FFMPEGStream' total cpu usage of 0.4% matches resource limit [cpu usage>1.0%] 
    [CET Jan 10 12:55:22] error : 'FFMPEGStream' total cpu usage of 0.9% matches resource limit [cpu usage>1.0%] 
    [CET Jan 10 12:55:27] error : 'FFMPEGStream' total cpu usage of 0.9% matches resource limit [cpu usage>1.0%] 
    [CET Jan 10 12:55:32] error : 'FFMPEGStream' total cpu usage of 0.0% matches resource limit [cpu usage>1.0%] 
    [CET Jan 10 12:55:37] error : 'FFMPEGStream' total cpu usage of 0.0% matches resource limit [cpu usage>1.0%] 
    [CET Jan 10 12:55:42] error : 'FFMPEGStream' total cpu usage of 0.0% matches resource limit [cpu usage>1.0%] 
    [CET Jan 10 12:55:47] error : 'FFMPEGStream' total cpu usage of 0.4% matches resource limit [cpu usage>1.0%] 
    [CET Jan 10 12:55:50] info  : 'FFMPEGStream' trying to restart 
    [CET Jan 10 12:55:50] info  : 'FFMPEGStream' stop: PATH-to-file/streambash.sh 
    [CET Jan 10 12:55:51] info  : 'FFMPEGStream' start: PATH-to-file/streambash.sh 
    [CET Jan 10 12:55:56] error : 'FFMPEGStream' process is not running 
    [CET Jan 10 12:55:58] info  : 'FFMPEGStream' trying to restart 
    [CET Jan 10 12:55:58] info  : 'FFMPEGStream' start: PATH-to-file/streambash.sh 
    [CET Jan 10 12:56:04] error : 'FFMPEGStream' process is not running 
    [CET Jan 10 12:56:04] info  : 'FFMPEGStream' trying to restart 
    [CET Jan 10 12:56:04] info  : 'FFMPEGStream' start: PATH-to-file/streambash.sh 
    [CET Jan 10 12:56:09] error : 'FFMPEGStream' process is not running 
    [CET Jan 10 12:56:09] info  : 'FFMPEGStream' trying to restart 
    [CET Jan 10 12:56:09] info  : 'FFMPEGStream' start: PATH-to-file/streambash.sh 

Monit halten versucht, den Prozess neu zu starten und auf jedem erneuten Versuch, gibt sie ein neues pid zum PATH-to-file/streampid.pid, aber wie ich sagte, es scheint, ist es irgendwie kann den tatsächlichen ffmpeg stream/pid stoppen, der im Hintergrund läuft.

+0

Warum nicht schön oder Cgroups verwenden? –

+0

Mein Problem ist nicht CPU-Behandlung, mein Problem ist Prozess wird nicht neu gestartet oder zumindest nicht wie in monit gestartet, wenn nach seiner nicht ausgeführt wird. CPU-Nutzung ist nur eine Möglichkeit, dass ich wusste, dass der Prozess nicht funktioniert oder ffmpeg ist Codierung oder ein verwandtes Problem. Es macht also keinen Sinn, nette oder cgroups zu verwenden. – user2201239

Antwort

0

Ihr Abfragezyklus/Daemon-Prüfintervall ist sehr niedrig, 5 Sekunden?

FFMpeg startet nicht innerhalb von 5 Sekunden, also versucht monit, es erneut zu starten, ständig in einer Schleife.

Wenn Sie einen solchen niedrigen Prüfintervall haben wollen, müssen Sie ein Timeout auf dem Startbefehl setzen, entlang der Linien von:

start program = "PATH-to-file/streambash.sh restart" with timeout 30 seconds 

Das hilft mir wirklich monit Art zu denken, zu sehen, verstehen Das Live-Log in einem Terminal-Fenster, während Monit Dinge tut:

tail -f /var/log/monit.log 
+0

Eine andere Sache, monit/monit webif ist sehr langsam zu erkennen und zu aktualisieren CPU-Nutzung auf einem kürzlich gestarteten Prozess. Sei geduldig und gib ihm eine Minute oder mehr! Selbst wenn der Prozess gestartet wurde und z. B. 10% CPU verwendet, gibt monit webif an, dass der Prozess immer noch 0% verwendet und den Prozess in einer manchmal nie endenden Schleife neu startet. – Paul

Verwandte Themen