Autostart eines Python-Programms auf dem Raspberry

  • Hallo zusammen,


    Zur Zeit versuche ich einen Raspberry Pi als Server bei mir im Labor zu installieren.


    Darauf soll ein Python-Programm zur Datenverarbeitung laufen. Abends würde ich gerne den Raspberry ausschalten und wenn ich morgens den wieder einstecke soll das Programm wenn möglich automatisch starten. Zurzeit funktioniert der "Autostart" bei mir nur, wenn ich mich per "Remotedesktopverbindung" mit dem Raspberry verbinde.

    Hab auch schon hier im Forum nachgeschaut, aber die Lösungen hier haben bei mir nicht funktioniert... (Kann auch sein, das ich was falsch gemacht habe bin ein Anfänger, wenn es um programmieren geht:angel:)


    Kann mir da jemand helfen?


    Auch andere Lösungsvorschläge wäre erwünscht, wie zum Beispiel hatte ich auch die Idee, dass der Raspberry die ganze Zeit an ist und das Programm zu einer bestimmten Zeit gestartet wird und im Programm baue ich dann einen Timer ein, welcher das Programm nach einer gewissen Zeit eigenständig beendet.


    Bin für alles offen :conf::gk1::danke_ATDE:

  • Den PI 'einfach Ausschalten# ist Sch....lecht

    Man sollte/muss ihn sauber hinunter fahren. Dafür gibt es verschiedenen Methoden. Eine wäre eine auf dem PI sitzende USV. Dann schaltet man ihn aus, die USV fährt ihn runter. Dann kann man ihn am nächsten Tag normal einschalten.


    Für das andere gibt es zwei Methoden, wenn auf dem PI eine neue PI-OS-Version mit 'systemd' läuft, schreibt man eine System-Unit, die das Programm, auch ein Python-Programm startet, wenn der PI hochfährt.

    In der kann man auch vorsehen, dass das System die Unit überwacht und neu startet, wenn sie abgestürzt ist oder sie nur zu konfigurierten Zeiten starten.

    Selber denken,
    wie kann man nur?

  • Hallo,


    so wie ich dich verstehe, startest du das Programm zur Zeit manuell über den Remotezugriff?


    Um Programme automatisch zu starten, auch zu gewünschten Uhrzeiten, gibt es System-Units. Hier habe ich drei Links, die mir dabei geholfen haben:


    timer-units

    Timers

    Use systemd timers instead of cronjobs


    Grüße

    Dennis

    🎵🎸Die Nordsee schlägt dir ins Gesicht, trotzdem hast du verloren, du bist nicht weit gekommen, du läufst weiter nach vorn 🎵🎸

    • Official Post

    Vergesst doch mal bitte kurz euer systemd-Zeugs und fragt erstmal wo und wie das Programm gestartet werden soll!


    Andrey35 Soll das Programm auf dem Desktop in einem Terminalfenster gestartet werden oder hat das selber ein GUI? ODER soll das im CLI starten oder irgendwo im Hintergrund laufen?


    //Edit Wie genau startest Du das per Remotedesktopverbindung?

  • und fragt erstmal wo und wie das Programm gestartet werden soll!

    Steht doch im Ausganspost des TE: auf dem Raspberry Pi und wie weiß der TE nicht *SCNR*


    So, jetzt mal im ernst:

    @Andrey35:

    Hab auch schon hier im Forum nachgeschaut, aber die Lösungen hier haben bei mir nicht funktioniert...

    Na ja, darauf geht aber nicht hervor, WAS du probiert hast. Und "funktioniert nicht" ist jetzt auch keine Fehlermeldung, die irgendwie weiter hilft.


    Was ist das den für ein Programm? Läuft das im Hintergrund? Oder hat das eine Benutzeroberfläche und verlangt Interaktion mit dem Nutzer?

    Wenn es im Hintergrund laufen kann / soll: wann soll das Programm denn gestartet werden? Jedesmal, wenn der Raspi bootet, auch dann wenn niemand auf dem Raspi arbeitet / sich einloggt? Oder nur, wenn jemand sich einloggt? Wenn ja, mit oder ohne GUI?


    Der Hintergrund der ganzen Frage ist, das es verschiedene Weg gibt - der richtige ist aber maßgeblich davon abhängig, wie wo wann dein Programm laufen soll und ob mit oder ohne GUI.


    Gruß, noisefloor

  • Hallo zusammen vielen Dank für Eure Beiträge bis her.

    noisefloor, Rasp-Berlin, Dennis89,hyle

    Ich wollte mich einfach im allgemeinen darüber informieren, was es für Möglichkeiten für mich gibt. Deswegen habe ich das, was ich bisher programmiert habe nicht rein gestellt. Der Raspberry steht mir gerade nicht zur Verfügung. Ich könnte dann später im Laufe des Tages meinen Ansatz rein posten.

    Vergesst doch mal bitte kurz euer systemd-Zeugs und fragt erstmal wo und wie das Programm gestartet werden soll!


    Andrey35 Soll das Programm auf dem Desktop in einem Terminalfenster gestartet werden oder hat das selber ein GUI? ODER soll das im CLI starten oder irgendwo im Hintergrund laufen?


    //Edit Wie genau startest Du das per Remotedesktopverbindung?



    Hallo ihr beiden.


    Das Programm, das ich auf dem Raspberry laufen lasse ist ein Socketserver-Programm, was bedeutet dieses soll im besten Fall im Hintergrund laufen und auf eingehende Signale von außen warten. Das alles passiert ohne GUI !

    Am besten wäre natürlich eine Lösung, wo der Raspberry das Programm selbstständig zur einen bestimmten Uhrzeit startet und dann zur einer bestimmten Uhrzeit wieder schließt und am nächsten Tag wieder das gleiche passiert, ohne das ich manuell da was machen muss

    • Official Post

    Das Programm, das ich auf dem Raspberry laufen lasse ist ein Socketserver-Programm, was bedeutet dieses soll im besten Fall im Hintergrund laufen und auf eingehende Signale von außen warten. Das alles passiert ohne GUI !


    Am besten wäre natürlich eine Lösung, wo der Raspberry das Programm selbstständig zur einen bestimmten Uhrzeit startet und dann zur einer bestimmten Uhrzeit wieder schließt und am nächsten Tag wieder das gleiche passiert, ohne das ich manuell da was machen muss

    Sind wichtige Informationen, die eigentlich in den Beitrag #1 gehört hätten. Ohne diese Infos hätte es auch ein Programm mit GUI sein können und da wäre Systemd imho nicht der geeignete Weg. Ebenso wird wohl Netzwerk benötigt, das zum Programmstart schon "oben" sein muss. Das ist auch zu beachten.


    Also bitte leg beim nächsten mal gleich alle Infos auf den Tisch! ;)

  • Hallo,


    Quote

    Am besten wäre natürlich eine Lösung, wo der Raspberry das Programm selbstständig zur einen bestimmten Uhrzeit startet ...

    Warum muss das denn sein, d.h. warum kann das Programm nicht einfach immer laufen, wenn der Raspi läuft?


    Gruß, noisefloor

  • Hallo,


    Warum muss das denn sein, d.h. warum kann das Programm nicht einfach immer laufen, wenn der Raspi läuft?


    Gruß, noisefloor

    Hey Noisefloor,


    An sich wäre das kein großes Problem, wenn der Raspberry durchlaufen würde. An sich wäre mein Hauptanliegen, dass das Programm beim starten des Raspberrys (kann ja sein, dass der Strom ausfällt/ausversehen ausgemacht wird..) automatisch wieder startet.


    Aber die Möglichkeit einen Timer für das Programm einzubauen finde ich aber nützlich zu Wissen.


    Grüße und schöner Restwochenende Andrey35


    PS. Werde mal kommende Woche das probieren auf dem Raspberry zu machen

  • Hallo,


    Quote

    An sich wäre mein Hauptanliegen, dass das Programm beim starten des Raspberrys (kann ja sein, dass der Strom ausfällt/ausversehen ausgemacht wird..) automatisch wieder startet.

    Genau das macht systemd doch! Es startet Dienst / Programme beim Systemstart. Jedem Systemstart. Und es kümmert sich drum, dass die Dienste beendet werden, wenn das Betriebssystem herunterführt. Außerdem kannst du die systemd Service Unit so schreiben, dass das Prog / der Dienst automatisch neu gestartet werden, wenn das Prog crasht.


    Was du mit den Timern vorhast ist unnötig kompliziert.


    Gruß, noisefloor

  • Hallo,


    Dann werde ich es so machen. Danke dir und dem Rest für die Hilfe :)


    Grüße Andrey35

  • Hallo zusammen,

    Genau das macht systemd doch! Es startet Dienst / Programme beim Systemstart.


    Habe mal jetzt mit systemd versucht alles zum laufen zu bringen.

    Kriege aber diese Fehlermeldung nicht weg:


    ● autostart.service

    Loaded: loaded (/etc/systemd/system/autostart.service; static; vendor preset: enabled)

    Active: failed (Result: exit-code) since Tue 2021-01-12 10:32:48 CET; 1s ago

    Process: 1654 ExecStart=/home/pi/python3 -u Backuptest.py (code=exited, status=203/EXEC)

    Main PID: 1654 (code=exited, status=203/EXEC)


    Jan 12 10:32:48 raspberrypi systemd[1]: autostart.service: Service RestartSec=100ms expired, scheduling restart.

    Jan 12 10:32:48 raspberrypi systemd[1]: autostart.service: Scheduled restart job, restart counter is at 5.

    Jan 12 10:32:48 raspberrypi systemd[1]: Stopped autostart.service.

    Jan 12 10:32:48 raspberrypi systemd[1]: autostart.service: Start request repeated too quickly.

    Jan 12 10:32:48 raspberrypi systemd[1]: autostart.service: Failed with result 'exit-code'.

    Jan 12 10:32:48 raspberrypi systemd[1]: Failed to start autostart.service.


    So sieht meine autostart.service Datei aus:



    Unit]

    Description=autostart

    After=network.target


    [Service]

    ExecStart=/home/pi/python3 Backuptest.py

    WorkingDirectory=/home/pi

    StandardOutput=inherit

    StandardError=inherit

    Restart=always

    User=pi


    [Install]

    WantedBy=multi-user.target

    Edited once, last by Andrey35 ().

    • Official Post

    Process: 1654 ExecStart=/home/pi/python3 -u Backuptest.py (code=exited, status=203/EXEC)

    Main PID: 1654 (code=exited, status=203/EXEC

    Absolute Pfade verwenden, ansonsten Fehlermeldung googlen!



    //Edit


    Und was soll eigentlich /home/pi/python3 sein? :conf: