Warum hallo da! Erstplakat, Langzeitleser.Systemdienst (Python-Schleife -> ffmpeg-Stream)
Diese Frage ist ein bisschen schwierig für mich, als ich noch ein Anfänger/Zwischen Benutzer von raspbian (Debian Stretch) bin und Python im Allgemeinen, aber hier geht:
Ich bin aktuell laufenden einen Strom mit ffmpeg durch icecast2 durch eine Python Schnipsel (Fig1). Ich habe einen systemd Service geschaffen, sagten zu laufen Python Skript beim Booten (Fig2) und ein benutzerdefiniertes Ziel verwenden (Fig3) sicherzustellen, dass es lädt einmal jeder zweiter Dienst geladen wird, vor allem für icecast2.
Ich habe mehrere Tests durchgeführt, und der Stream funktioniert einwandfrei, wenn er entweder aus dem Python-Code gestartet wird oder wenn ich den damit verbundenen Dienst neu starte.
Mein Problem ist, dass der Dienst bei einem (Neu-) Booten des Systems etwa 15 Sekunden lang läuft, dann stirbt der Stream. Ich habe so viel über Python und systemd gelesen, aber ich kann nicht für das Leben von mir herauszufinden, wo das Problem liegt. Ich habe versucht, meine Python Code, die Ladeeinheit Reihenfolge und alles, was ich online gefunden, die helfen könnte, aber nichts gefunden.
Fig1 (dxstream.py)
import sys
import time
import subprocess
def start():
return subprocess.Popen(r’ffpmeg -re -f alsa -ac2 -i hw:1,0 -acodec mp3 -ab 320k -f mp3 icecast://[email protected]:8000/stream', shell=True)
testProcess = start()
while True:
res = testProcess.poll()
if res is not None:
testProcess = start()
time.sleep(1)
Fig2 (dxstream.service)
[Unit]
Description=ffmpeg stream starter
After=multi-user.target
[Service]
Type=idle
Execstart=/usr/bin/python /usr/local/bin/dxstream.py
Restart=on-failure
[Install]
WantedBy=custom.target
Fig3 (custom.target)
[Unit]
Description=Custom Target
Requires=multi-user.target
After=multi-user.target
AllowIsolate=yes
Wenn mir jemand einen allgemeinen Hinweis auf eine Lösung geben könnte, wäre ich unendlich dankbar!
Vielen Dank.