UNIT startet nur bei Anmeldung

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    ich habe ein Python Skript das einen Waveshare POE HAT mit OLED Display einbindet
    Soweit funktioniert das auch Skript auch.
    Im nächsten Schritt wollte ich das Skript von einem UNITS beim Start ausführen lassen.

    Leider funktioniert der Befehl im Unit erst, wenn ich mich per SSH anmelde.

    hier der Inhalt des Units

    Code
    [Unit]
    Description=POE-HAT-starten
    
    [Service]
    Type=simple
    ExecStart=/usr/bin/python3 /home/pi/PoE_HAT_B_code/python/examples/main.py
    
    [Install]
    WantedBy=reboot.target

    was mache ich hier falsch...?

    Vielen Dank Vorab für Eure Hilfe!

  • Da gehört es hin:

    /etc/systemd/system/(mySystem.service)

    Servus !

    Edit: (mySystem.service) kann durch beliebige Namen ersetzt werdem solange die nicht schon anderweitig von systemd verwendet werden.

    #5 kannte ich noch nicht.

    RTFM = Read The Factory Manual, oder so

    Einmal editiert, zuletzt von RTFM (22. April 2021 um 16:26)

  • Hallo,

    vielen Dank für Deine Antwort.

    Ich hab das so versucht aber leide rauch keine Änderung.
    Nach einem Reboot startet das Skript nicht.

    • Offizieller Beitrag

    Type:simple

    Da gehört kein Doppelpunkt hin! In #1 war es noch richtig.

    Funktioniert das denn wenn Du die Unit manuell startest?

    sudo systemctl start poe-HAT.service ?

    Was sagt journalctl?

    Was ist wenn Du die Service Unit aus meinem Link verwendest und nur die Pfade zu Deinem Skript anpasst?

  • sorry für den Doppelpunkt.

    Den Type hatte ich schon ausprobiert, aber auch mit = statt : klappt das nicht.

    Manuell hatte ich das auch schon versucht. mit systemctl startet das Ding wie es soll.

    Das Journal hab ich abgerufen, sind 726 Zeilen.

    Rot wurde nix markiert. Aber das hier habe ich gefunden:

    Apr 22 20:35:20 raspberrypi systemd[1]: poe-HAT.service: Main process exited, code=exited, status=1/FAILURE

    Apr 22 20:35:20 raspberrypi systemd[1]: poe-HAT.service: Failed with result 'exit-code'.

  • Hallo

    Versuche es mit einem Timer der ta.timer startet nach 40 Sekunden den ta.service mit Deinem Script.

    ta.timer

    Code
    [Unit]
    Description=Start vom ta.service - On Off Reboot per Taste.
    
    [Timer]
    OnBootSec=40sec
    Persistent=true
    
    [Install]
    WantedBy=timers.target

    ta.service

    sudo cp ta.timer /etc/systemd/system/

    sudo cp ta.service /etc/systemd/system/

    sudo systemctl enable --now ta.timer

    Kontrollen.

    systemctl list-timers --all

    ps -A | grep ta_s*

  • WantedBy=multi-user.target ?

    Also für deinen Fall würd ich kein reboot.target nehmen.

    https://wiki.ubuntuusers.de/systemd/Units/…-WantedBy-Arten

    Wie sieht der Code in der main.py aus?

    Hast du die Unit mit systemctl enable <poe-HAT.service> auch für den Autostart konfiguriert?

    Das Journal hab ich abgerufen, sind 726 Zeilen.

    Rot wurde nix markiert. Aber das hier habe ich gefunden:

    Präziser wäre es gegangen mit: journalctl -u poe-HAT.service

    Sollte das mit der Timer Unit funktionieren, dann fehlt zum Start nur eine Abhängigkeit und Requires und After muss noch präziser definiert werden.

  • Hallo zusammen,

    die ta.timer und ta.service habe ich im entsprechenden Verzeichnis angelegt und mit dem Befehl

    Sudo Systemctl enable aktiviert

    Timer ist auch aktiv und wird angezeigt. Abgefragt mit dem Befehl

    systemctl list-timers --all

    Nach einem Neustart , funktioniert leider das Skrip nicht.

    Sobald ich mich anmelden , klappt alles wie es soll.

    Generell nochmals eine Beschreibung, eher Frage ob das so richtig ist.

    Skript und Vorgehensweise auf der Seite hier zu finden. --> https://www.waveshare.com/wiki/PoE_HAT_(B)

    Das main.py unten nochmals angehängt.

    Von Waveshare wird empfohlen, das über rc.local zu machen.

    Was ich auch genau so gemacht habe. Funktionierte leider nicht.

    Dann hab ich hier im Forum einiges gelesen und hab dann mit den Units probiert.

    Datei poe-HAT. service erstellt und diese aktiviert.

    Die poe-HAT. service Datei hab ich auch ausführbar gemacht , ob das notwendig ist, war mir nicht klar.

    Zumindest startet das Skript so wie es sein soll, jedoch nur bei Anmeldung über ssh oder Anmeldung auf dem Desktop.

    machen ich hier einen generellen Fehler?


    Schönes Wochenende und viele Grüße

  • Möglicherweise kommt das Py.Script mit libdir und dem Environement nicht zurecht, sodass Zeile 6 + 7 erst ausgeführt wird, wenn gewisse Teile des User pi Environements vorhanden sind. Das Script ist für mich schon unverständlich genug, weil ich weder das os Modul, noch das POE_HAT_B Modul auswendig kenne.

    Meiner Meinung nach kannst Du ein Service-Unit auch als User Pi starten, ohne dass der User pi eingeloggt ist. Das geschieht im [Service] 'Abschnitt durch Angabe des Users, in dessen Name das Service ausgeführt werden soll. Das steht in < man systemd.service > und nachlesen kannst Du dort auch. Muss jetzt weg. (User=pi, oder so ähnlich)

    Servus !

    RTFM = Read The Factory Manual, oder so

  • Hallo zusammen, leider hab ich erst jetzt zurückschreiben können.
    Soweit ich das nun ausprobieren konnte , liegt es an einem anderen Unit, das von Dicaffeine stammt.
    Das ist ein Tool, zum wandeln von NDI Video Stream. --> https://dicaffeine.com/about


    Wenn ich dem PI erst den POE Hat installiere, klappt das auch mit dem Unit, den ich oben eingesetzt hab.
    Sobald das Dicaffeine installiere, klappt das POE Hat Tool erst wenn ich mich anmelde.

    VIELEN Dank an alle, die hier geschrieben haben.
    Ich werde weiter berichten

    Viele Grüße

Jetzt mitmachen!

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