pi-400 Autostart von Python Programm funktioniert nicht

  • Hallo liebes Forum, ich habe einen Raspberry PI 400 mit Raspberry OS.

    Diesen habe ich heute neu aufgesetzt:

    ich hab ein sudo apt update und upgrade durchgeführt und lediglich wenige Sachen für einen Datenbank Server installiert.


    Jetzt habe ich ein Python Skript welches in Thonny mit der Version "Python 3.7.3 (/usr/bin/python3)" läuft das steht zumindest in der Konsole.

    Zunächst kam ein Fehler mit dieser Zeile "import mysql.connector as mariadb": ModuleNotFoundError: No module namend "mysql"

    Daraufhin habe ich die Bibliothek über folgenden Befehl installiert:

    pip3 install mysql-connector-python


    Danach konnte ich mein Python Skript in Thonny ohne Probleme ausführen.


    Jetzt möchte ich dieses Programm in den Autostart von dem Raspberry hinzufügen mittels der rc.local Datei, dies funktioniert leider nicht.

    Darauf hin habe ich die rc.local Datei mal in der Konsole ausgeführt daraufhin kam wieder die Fehlermeldung dass die Datei mqsql nicht gefunden werden konnte?


    Also hab ich mal versucht nur das Python Skrip in der Konsole zu starten:


    mit: python /home/pi/Desktop/AKA-Server.py & funktioniert es nicht

    mit python3 /home/pi/Desktop/AKA-Server.py & funktioniert es

    mit sudo python3 /home/pi/Desktop/AKA-Server.py & funktioniert es nicht


    selbst wenn ich python3 /home/pi/Desktop/AKA-Server.py & in die rc.local Datei schreibe funktioniert es nicht da diese Datei wahrscheinlich automatisch über sudo ausgeführt wird?


    PS: Das folgende hab ich bereits oben in meine Datei geschrieben geht leider trotzdem nicht


    #!/usr/bin/python3.7

    #-*- coding:utf-8 -*-




    Hat jemand eine Idee wie ich das Problem beheben kann?



    Viele Grüße

    Alexander

    Edited once, last by Alex96 ().

  • Go to Best Answer
  • Hallo,


    also rc.local ist total veraltet und existiert nur noch aus Gründen der Rückwärtskompatibilität. Stand der Dinge zum Starten von Skripten im Hintergrund ist systemd und eine systemd Service Unit.


    Zum Problem: mit `pip3 install ...` wird das Python-Modul normalerweise "nur" für den ausführenden Benutzer (also per Default der Nutzer `pi`) installiert, nicht systemweit (was prinzipiell gut ist). Wenn du dein Skript mit `sudo` ausführst bekommt es Root-Rechte - für Root ist das Modul aber nicht installiert, ergo der Fehler.

    Wenn das Skript nicht aus anderen Gründen zwingend Root-Rechte braucht solltest du es auch nicht mir Root-Rechten ausführen. Wenn du das Skript automatisch über eine systemd Service Unit startest, dann kannst du in der Unit festlegen, unter welchem Nutzer das Skript ausgeführt wird.


    Quote

    PS: Das folgende hab ich bereits oben in meine Datei geschrieben geht leider trotzdem nicht

    Hat mit deinem Problem auch nichts zu tun.


    Gruß, noisefloor

  • Hi vielen Dank für die Antworten.

    Ich habe mal versucht den autostart mit einem Systemd Service zum laufen zu kriegen aber ich schaffe es leider nicht.


    Wenn ich den Service mit "sudo systemctl start sample.service" starte funktioniert es aber leider nicht wenn ich den raspberry neustarte.


    sudo systemctl enable sample.service habe ich bereits ausgeführt.


    So sieht meine Service Datei aus:

    "

    [Unit]

    Description=My service

    After=network.target


    [Service]

    ExecStart=/usr/bin/python3 -u AKA-Server.py

    WorkingDirectory=/home/pi/Desktop

    StandardOutput=inherit

    StandardError=inherit

    Restart=always

    User=pi


    [Install]

    WantedBy=multi-user.target

    "


    aber die scheint ja zu funktionieren oder nicht?


    Viele Grüße

    Alexander

  • Hi das enable habe ich gemacht. Habe mit deiner Hilfe den Status anzeigen lassen das kommt dabei raus:

    ● sample.service - My service

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

    Active: failed (Result: exit-code) since Fri 2021-09-17 21:31:55 CEST; 52s ago

    Process: 775 ExecStart=/usr/bin/python3 -u AKA-Server.py (code=exited, status=1/FAILURE)

    Main PID: 775 (code=exited, status=1/FAILURE)


    Sep 17 21:31:55 raspberrypi systemd[1]: sample.service: Service RestartSec=100ms expired, scheduling restart.

    Sep 17 21:31:55 raspberrypi systemd[1]: sample.service: Scheduled restart job, restart counter is at 5.

    Sep 17 21:31:55 raspberrypi systemd[1]: Stopped My service.

    Sep 17 21:31:55 raspberrypi systemd[1]: sample.service: Start request repeated too quickly.

    Sep 17 21:31:55 raspberrypi systemd[1]: sample.service: Failed with result 'exit-code'.

    Sep 17 21:31:55 raspberrypi systemd[1]: Failed to start My service.

  • Hallo,


    was bedeutet das '-u' im Programmaufruf?


    Im ersten Beitrag schreibst du, dass dein Programm mit python3 /home/pi/Desktop/AKA-Server.py funktioniert.


    Wieso schreibst du dann in deiner Unit etwas anderes?

    Was ist mit ExecStart=/usr/bin/python3  /home/pi/Desktop/AKA-Server.py


    aber die scheint ja zu funktionieren oder nicht?

    Was sagt systemctl status sample.service dazu?


    Ist das ein Programm, mit einem GUI?

    Vielleicht kannst du das Programm auch mal zeigen.


    Grüße

    Dennis


    Edit: Da war ich mit dem status etwas zu langsam :sleepy:

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • Das Programm hat noch keine GUI es handelt sich um einen Socketserver welcher eine Verbindung mit verschiedenen im Netzwerk befindlichen Geräten herstellt und eine Verbindung mit einer auf dem Raspberry befindlichen Datenbank über mariadb herstellen soll.


    Den ersten Beitrag können wir denke ich vergessen wenn die vorgehensweise für den Autostart schon falsch war oder nicht?

    Wo ich in meiner Unit etwas anderes geschrieben aber erschließt sich mir noch nicht :?


    Sorry bin wirklich erst seit 2 Tagen mit Linux am arbeiten ist alles noch sehr neu für mich.

  • Alex96

    Changed the title of the thread from “Python Programm über Konsole starten funktioniert nicht wenn sudo davor steht” to “pi-400 Autostart von Python Programm funktioniert nicht”.
  • Sorry bin wirklich erst seit 2 Tagen mit Linux am arbeiten ist alles noch sehr neu für mich.

    Alles klar, dann versuchen wir es mal so


    cd /etc/systemd/system

    sudo nano socketserver.service

    Code
    [Unit]
    Description=Start Socket-Server
    
    
    Service]
    ExecStart=/usr/bin/python3 /home/pi/Desktop/AKA-Server.py
    User=pi
    
    [Install]
    WantedBy=multi-user.target

    Datei Speichern mit Strg+o und schliessen mit Strg+x


    sudo systemctl enable socketserver.service

    sudo systemctl start socketserver.service


    Läuft das Skript?

    sudo systemctl status socketserver.service

    Müsstest du ja aber auch sonst irgendwie an deiner Datenbank sehen.


    Wenns läuft, dann mal einen Neustart versuchen.


    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • Hier erst einmal die journal:

    Ich würde mal behaupten es liegt daran dass er den Socketserver irgendwie nicht initialisieren kann?


    Sep 17 21:31:50 raspberrypi python3[473]: File "AKA-Server.py", line 26, in Sep 17 21:31:50 raspberrypi python3[473]: s.bind(('192.168.178.100', 5005 ))
    Sep 17 21:31:50 raspberrypi python3[473]: OSError: [Errno 99] Cannot assign requested address


    Dennis würde ich danach mal probieren wobei ich von meinem Verständnis nach der Journal Datei nicht glaube, dass das Problem dadurch gelöst werden würde?


  • Sep 17 21:31:50 raspberrypi python3[473]: Traceback (most recent call last):
    Sep 17 21:31:50 raspberrypi python3[473]: File "AKA-Server.py", line 26, in

    Sep 17 21:31:50 raspberrypi python3[473]: s.bind(('192.168.178.100', 5005 ))
    Sep 17 21:31:50 raspberrypi python3[473]: OSError: [Errno 99] Cannot assign requested address


    Ändere in der Unit mal After=network.target in After=network-online.target.

  • Bekommst du den Fehler auch, wenn du mit systemctl start sample.service das Skript startest?

    Wenn das nicht geht, dann würde ich sagen, dass der Fehler wo anders liegt.



    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • Edited 2 times, last by Alex96 ().