Wie bekomme ich es hin das eine Python Datei Automatisch gestartet wird auf dem Raspberry Pi5?

1 Antwort

Von Experte guenterhalt bestätigt
Mit ChatGPT versucht und es hat mir für die " .service" Datei gesagt, dass ich auch " /usr/bin/python3" zwischen " ExecStart=" und " /home" hinzufügen sollte. Habe es versucht und in der Fehlermeldung steht drin, dass man nicht mehr als einen setting in " ExecStart=" rein machen darf und auch mehrere " ExecStart=" gehen auch nicht.

Ist Deine .py denn ausführbar und hat ne SheBang? Dann sollte die Angabe des Pythoninterpreters nicht nötig sein.

Wenn Du es aber doch mti Interpreter starten möchtest, dann wäre die Dokumentation die erste Anlaufstelle, aber im Grunde sollte es ein:

ExecStart=/usr/bin/python3 /home/richard/Openhab_Mqttv2.py

eigentlich tun.

Nochmal direkt hier, da ich zunächst nicht drauf geachtet hatte:

#After=network.target #nicht das hier
After=network-online.target

network-online stellt typischerweise sicher, daß Kommunikation mit der Außenwelt möglich ist, während ersteres nur dafür sorgt, daß zumindest der IP-Stack aktiviert wurde und ggf. die entsprechendne Module geladen sind.

Alternativ könntest (und solltest) Du Dein Skript reparieren, denn sowas wie daemons sollten robust ggü. entsprechenden Fehlern sein, insbesondere falls der Zustand nur temporär ist.

Dyxen07 
Fragesteller
 03.04.2024, 01:36

Die .py Datei läuft ohne Probleme, wenn ich es Manuel starte über "python Openhab_Mqttv2.py" im Terminal

und hat ne SheBang?

Die "/etc/systemd/system/Openhab_Mqttv2_Autostart.service" Datei hat meines Wissens nach keine SheBang mit "#!/usr/bin/python3"

ExecStart=/usr/bin/python3 /home/richard/Openhab_Mqttv2.py

Genau diesen Code hatte ich versucht gehabt und es kam dazu ein Fehlercode, dass man nicht mehrere Settings in ein "ExecStart=" rein machen darf. Und ein weiteres "ExecStart=" geht ja wie oben schon erzählt auch nicht

0
KarlRanseierIII  03.04.2024, 01:48
@Dyxen07

SheBang bezog sich natürlich auf das Pythonskript selbst, also ob in Deinem Openhab:Mqttv2.py eine ShBang vorhanden ist.

Genau diesen Code hatte ich versucht gehabt und es kam dazu ein Fehlercode, dass man nicht mehrere Settings in ein "ExecStart=" rein machen darf.
[...]
ExecStart=/usr/bin/python3 /root/echo.py
[...]
#journal:
Apr 03 01:10:31 stratus systemd[1]: Started Openhab Mqtt working  Autostart.
Apr 03 01:12:12 stratus systemd[1]: Stopping Openhab Mqtt working  Autostart...
Apr 03 01:12:12 stratus systemd[1]: mytest.service: Deactivated successfully.
Apr 03 01:12:12 stratus systemd[1]: Stopped Openhab Mqtt working  Autostart.

Das funktioniert so definitiv.

1
Dyxen07 
Fragesteller
 03.04.2024, 13:46
@KarlRanseierIII
ExecStart=/usr/bin/python3 /root/echo.py

Habe diesen Code eingefügt, den alten entfernt bei "ExecStart=" und mein System mal rebootet. Es kommen Fehlermeldungen und ist gescheitert zu starten.

x@raspberrypi:~ $ systemctl status Openhab_Mqttv2_Autostart.service
× Openhab_Mqttv2_Autostart.service - Openhab Mqtt working  Autostart
     Loaded: loaded (/etc/systemd/system/Openhab_Mqttv2_Autostart.service; enabled; preset: enabled)
     Active: failed (Result: exit-code) since Wed 2024-04-03 13:33:34 CEST; 3min 8s ago
   Duration: 141ms
    Process: 1128 ExecStart=/usr/bin/python3 /home/richard/Openhab_Mqttv2.py (code=exited, status=1/FAILURE)
   Main PID: 1128 (code=exited, status=1/FAILURE)
        CPU: 131ms


Apr 03 13:33:34 raspberrypi systemd[1]: Openhab_Mqttv2_Autostart.service: Scheduled restart job, restart counter is at 5.
Apr 03 13:33:34 raspberrypi systemd[1]: Stopped Openhab_Mqttv2_Autostart.service - Openhab Mqtt working  Autostart.
Apr 03 13:33:34 raspberrypi systemd[1]: Openhab_Mqttv2_Autostart.service: Start request repeated too quickly.
Apr 03 13:33:34 raspberrypi systemd[1]: Openhab_Mqttv2_Autostart.service: Failed with result 'exit-code'.
Apr 03 13:33:34 raspberrypi systemd[1]: Failed to start Openhab_Mqttv2_Autostart.service - Openhab Mqtt working  Autostart.

#journal:
x@raspberrypi:~ $ sudo journalctl -u Openhab_Mqttv2_Autostart.service
Apr 02 21:49:44 raspberrypi systemd[1]: Started Openhab_Mqttv2_Autostart.service - Mein Service.
Apr 02 21:49:45 raspberrypi python3[958]: Traceback (most recent call last):
Apr 02 21:49:45 raspberrypi python3[958]:   File "/home/richard/Openhab_Mqttv2.py", line 417, in <module>
Apr 02 21:49:45 raspberrypi python3[958]:     client.connect( "192.168.0.182", 1883, 60)
Apr 02 21:49:45 raspberrypi python3[958]:   File "/usr/lib/python3/dist-packages/paho/mqtt/client.py", line 914, in connect
Apr 02 21:49:45 raspberrypi python3[958]:     return self.reconnect()
Apr 02 21:49:45 raspberrypi python3[958]:            ^^^^^^^^^^^^^^^^
Apr 02 21:49:45 raspberrypi python3[958]:   File "/usr/lib/python3/dist-packages/paho/mqtt/client.py", line 1044, in reconnect
Apr 02 21:49:45 raspberrypi python3[958]:     sock = self._create_socket_connection()
Apr 02 21:49:45 raspberrypi python3[958]:            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Apr 02 21:49:45 raspberrypi python3[958]:   File "/usr/lib/python3/dist-packages/paho/mqtt/client.py", line 3685, in _create_socket_connection
Apr 02 21:49:45 raspberrypi python3[958]:     return socket.create_connection(addr, timeout=self._connect_timeout, source_address=source)
Apr 02 21:49:45 raspberrypi python3[958]:            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Apr 02 21:49:45 raspberrypi python3[958]:   File "/usr/lib/python3.11/socket.py", line 851, in create_connection
Apr 02 21:49:45 raspberrypi python3[958]:     raise exceptions[0]
Apr 02 21:49:45 raspberrypi python3[958]:   File "/usr/lib/python3.11/socket.py", line 836, in create_connection
Apr 02 21:49:45 raspberrypi python3[958]:     sock.connect(sa)
Apr 02 21:49:45 raspberrypi python3[958]: OSError: [Errno 101] Network is unreachable
Apr 02 21:49:45 raspberrypi systemd[1]: Openhab_Mqttv2_Autostart.service: Main process exited, code=exited, status=1/FAILURE
Apr 02 21:49:45 raspberrypi systemd[1]: Openhab_Mqttv2_Autostart.service: Failed with result 'exit-code'.
Apr 02 21:49:45 raspberrypi systemd[1]: Openhab_Mqttv2_Autostart.service: Scheduled restart job, restart counter is at 1.

Erst nachdem ich alles Manuel mit "sudo systemctl daemon-reload", "sudo systemctl enable Openhab_Mqttv2_Autostart.service" und "sudo systemctl start Openhab_Mqttv2_Autostart.service" neu gestartet habe hatte es funktioniert und es kamen keine Fehlermeldungen.

Also wie kann ich so zu sagen einen Timer von 1min(dieser Timer mit "TimeoutStartSec=2min" funktioniert irgendwie nicht bei [Service]) in den Code rein machen oder eine Bedingung nachdem es erst starten soll. Oder gibt es noch andere Wege?

0
KarlRanseierIII  03.04.2024, 17:59
@Dyxen07
TimeoutStartSec=2min

Das hier wartet bis zu 2 Minuten, bis Deine Unit gestartet ist, nicht um sie danach zu starten.

Allerdings fällt mir noch auf:

After=network.target

Schau Dir mal den Unterschied zwischen network.target und network-online.target an.

network.target has very little meaning during start-up. It only indicates that the network management stack is up after it has been reached.

versus

network-online.target is a target that actively waits until the nework is "up", where the definition of "up" is defined by the network management software. Usually it indicates a configured, routable IP address of some kind.
1