Hintergrund-Skript stoppt nach einiger zeit

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hey Leute!

    Da sich die externen Lautsprecher für meinen TV nicht automatisch einschalten (automatisches Ausschalten funktioniert), wenn ich meinen TV einschalte, habe ich für meinen Raspi Zero ein Skript geschrieben, das in einer Endlosschleife per HDMI-CEC den Power-Status des TV abfragt. Wenn sich dieser ändert wird mithilfe von LIRC ein Infrarotkommando über einen dranhängenden IR-Blaster gesendet, der die Boxen einschaltet. Funktioniert alles super, nur wenn ich das Skript als Autostart (wird in init.d gestartet) im Hintergrund starten lasse, läuft das Skript immer nur einige Minuten und dann nicht mehr. Wenn ich es jedoch aktiv über SSH starte, läuft es immer weiter, so lang ich eben mit Putty draufbleibe. Hat jemand ne Idee, warum das Skript, wenn es im Hintergrund läuft, nicht endlos weiterläuft?

    Das Skript ist im Anhang. Als OS wird Raspbian Jessie verwendet (die LIRC-Version für neuere Rasbpian-OS ist Schrott, aber da der Zero im Endeffekt nur diese Sache machen soll und auch nicht im Netz hängt ist das kein Problem).

    Danke für eure Hilfe

  • Habe zwar kein Raspbian sondern Manjaro am Laufen, sollte aber ähnlich sein.

    So wie es mir scheint, findet systemd die audioswitch.service nicht und bricht das Script deswegen ab.

    Anstatt es in /etc/init.d/ zu verschieben oder zu verlinken, kannst Du das Script direkt mit systemd starten lassen.

    Dafür legst Du die Datei audioswitch.service im Verzeichnis /usr/lib/systemd/system/ an:

    sudo nano /usr/lib/systemd/system/audioswitch.service

    (Anstelle von nano kann natürlich auch "vim" oder "cat >" stehen.)

    mit folgendem Inhalt:

    Code
    [Unit]
    Description=Audio Switch
    
    [Service]
    ExecStart=%s /pfad/zu/audioswitch.sh
    
    [Install]
    Alias=audioswitch.service

    (Das %s bedeutet soviel wie /usr/bin/sh bzw. /bis/sh, also die Shell mit welcher das Script aufgerufen wird.)

    Dann eine Verknüpfung ins Verzeichnis /etc/systemd/system/ erstellen:

    sudo ln -sv /usr/lib/systemd/system/audioswitch.service /etc/systemd/system/

    Dann muss der systemd dämon neu geladen werden, um den neuen Service zu finden.

    sudo systemctl daemon-reload

    Danach kann der Service gestartet werden, mit

    sudo systemctl start audioswitch

    Und wenn's funtioniert, in die Autostart-Liste eingetragen werden

    sudo systemctl enable audioswitch

    Zusätzlich kannst Du Dir die Endlosschleife im Script sparen, wenn Du im Bereich [Service] die Zeile Restart=always einfügst. Die Definition der $tv Variablen vor der while-Schleife kannst Du dann in die if-Abfragen einbauen:

    Bash
    ...
    if [ "${tv:-off}" = "on" ]
    then
    ...

    3 Mal editiert, zuletzt von samtux (25. April 2021 um 23:55)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!