Autostart von Pythonscript über Systemd funktioniert nicht

  • Hallo zusammen,


    ich möchte beim Starten des Pi ein Pythonscript automatisch ausführen lassen. Dazu habe ich folgende Konfiguration durchgeführt:


    System:

    RPi 2B mit neuestem Stretch Release-Date 2018-11-13.

    Autostartfunktion (Konsole) des Pi-Users ist aktiviert.




    Code
    1. sudo nano /lib/systemd/system/Werkstattklima.service

    Inhalt der Datei Werkstattklima.service:

    Code
    1. [Unit] Description=Werkstattklima Service
    2. After=multi-user.target
    3. [Service] Type=idle
    4. ExecStart=/usr/bin/python /home/pi/messen/MessenSpeichernTSpeak_V2.01.py
    5. [Install] WantedBy=multi-user.target

    Rechte gesetzt:

    Code
    1. sudo chmod 644 /lib/systemd/system/Werkstattklima.service

    Nach der folgenden Anweisung wurde das Script einmal ausgeführt!

    Code
    1. sudo systemctl daemon-reload
    Code
    1. sudo systemctl enable Werkstattklima.service


    System neu gestartet:

    Code
    1. sudo reboot

    Das Script "MessenSpeichernTSpeak.py" wird nach dem reboot nicht ausgeführt!


    Die Rechte von MessenSpeichernTSpeak.py sind 755.

    Wird das Script von hand gestartet läuft es ohne Probleme:

    Code
    1. ./MessenSpeichernTSpeak_V2.01.py


    Mit älteren OS habe ich rc.local verwendet um das selbe Script zu starten, aber des funzt ja ab Jessie nicht mehr...


    Weis jemand Rat?


    Schöne Grüße RM

    Edited 2 times, last by RoterMilan ().

  • Hallo,


    was sagt denn der Status der Unit? Den kannst du via systemctl abfragen. Was was steht in Journal von systemd zu der Unit? Das Journal kannst du über journalctl abfragen.


    Unabhängig davon: wenn dein Skript was Loggen soll, dann nimm' das Logging Modul, das hat Python standardmäßig an Bord. Dann brauchst du nicht dne Umweg über die Shell und deren Umleitungen. Außerdem kannst du den Loglevel mit `logging` besser einstellen.


    Gruß, noisefloor

  • Hi noisefloor,


    was sagt denn der Status der Unit?

    systemctl > Meine erstellte Unit taucht da nicht auf


    Was was steht in Journal von systemd zu der Unit?

    journalctl > Meine erstellte Unit taucht da auch nicht auf


    hmmm...


    Werde deinen Rat mit dem Logging-Modul verfolgen..


    Gruß RM

  • Moin!


    Ich denke das der Tipp von noisefloor der Beste ist.


    Hier nur noch ein Hinweis auf systemctl-Units.

    Vor dem enablen einfach mal ein sudo systemctl start xyz.service. Dann sieht man sofort ob es funktioniert.


    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • sudo nano /lib/systemd/system/Werkstattklima.service

    Die Service-Unit gehört nach /etc/systemd/system/Werkstattklima.service


    Zunächstmal die falsche wieder disablen und dann an die richtige Stelle moven. Dann 2 terminal-fenster untereinander öffnen....

    im ersten wird journalctl -f eingegeben. Im zweiten wird danach die Service-Unit gestartet und dabei die Reaktion im ersten Fenster beobachtet.


    Code
    1. cd /etc/systemd/system
    2. systemctl daemon-reload
    3. systemctl start Werkstattklima.service
    4. systemctl status Werkstattklima.service

    Ausserdem ist das imho ein Widerspruch, der sich gegenseitig ausschließt:

    Code
    1. [Unit]
    2. After=multi-user.target
    3. [Install]
    4. WantedBy=multi-user.target


    WantedBy=graphical.target behebt diesen Konflikt.

    Edited 3 times, last by ThomasL ().

  • Hallo zusammen,

    ich habe auch ein wenig in der Doku gelesen um Systemd besser zu verstehen.


    Folgendes habe ich gemacht:

    1.) Ich habe die Unit Werkstattklima.service in /etc/systemd/system/ verschoben.

    2.) In der Unit habe ich die Zeile "After=multi-user.target" entfernt. Ich mache einen Autostart in den User Pi zur Konsole, nicht zur graphischen Oberfläche.


    Die Unit sieht nun so aus:

    Code
    1. [Unit]
    2. Description=Werkstattklima Service
    3. [Service]
    4. Type=idle
    5. ExecStart=/usr/bin/python /home/pi/messen/MessenSpeichernTSpeak_V2.01.py
    6. [Install]
    7. WantedBy=multi-user.target


    3.) Dann habe ich folgende Kommandos ausgeführt:


    Code
    1. pi@raspberrypi:~ $ sudo systemctl daemon-reload
    2. pi@raspberrypi:~ $ sudo systemctl start Werkstattklima.service
    3. pi@raspberrypi:~ $ sudo systemctl status Werkstattklima.service


    Werkstattklima.service - Werkstattklima Service

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

    Active: active (running) since Mon 2018-12-03 21:54:11 CET; 56s ago

    Main PID: 244 (python)

    CGroup: /system.slice/Werkstattklima.service

    └─244 /usr/bin/python /home/pi/messen/MessenSpeichernTSpeak_V2.01.py


    Sah schonmal gut aus!

    Code
    1. pi@raspberrypi:~ $ sudo systemctl enable Werkstattklima.service
    2. pi@raspberrypi:~ $ sudo reboot

    Nach dem reboot wieder:

    Code
    1. pi@raspberrypi:~ $ sudo systemctl status Werkstattklima.service


    Werkstattklima.service - Werkstattklima Service

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

    Active: active (running) since Mon 2018-12-03 21:54:11 CET; 56s ago

    Main PID: 244 (python)

    CGroup: /system.slice/Werkstattklima.service

    └─244 /usr/bin/python /home/pi/messen/MessenSpeichernTSpeak_V2.01.py


    Alles läuft perfekt!


    Vielen Dank für eure Mithilfe!

    :danke_ATDE: RM

  • Moin RoterMilan,


    danke für die Rückmeldung!


    Dann, bitte, noch dein Thema als erledigt markieren. Das geht oben bei "Thema bearbeiten".


    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.