Keine Logging-Ausgaben bei Script start über eine Systemd Unit!?

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo zusammen,

    wird folgendes Programm (Test des Logging-Moduls) über eine Systemd-Unit bei Pi-Start gestartet, wird keine Loggdatei erstellt!??

    Wird es manuell über die Konsole gestartet wird eine Loggdatei "programm.log" mit entsprechendem Eintrag erstellt und die Meldung ausgegeben, dass das Programm ausgeführt wurde.

    OS = Stretch (Nov.2018)

    Systemd Unit:

    Code
    [Unit]
    Description=Werkstattklima Service
    After=network.target
    
    [Service]
    Type=idle
    ExecStart=/usr/bin/python /home/pi/messen/Logging-Test.py
    
    [Install]
    WantedBy=multi-user.target

    pi@raspberrypi:~ $ sudo chmod 755 /etc/systemd/system/Werkstattklima.service

    pi@raspberrypi:~ $ sudo systemctl daemon-reload

    pi@raspberrypi:~ $ sudo systemctl start Werkstattklima.service

    Jetzt sollte die Loggingdatei im selben Verzeichnis wie die Scriptdatei "Logging-Test.py" erstellt werden!?

    Ein reboot blieb auch erfolglos. Der Pi ist so konfiguriert, dass er in die Konsole startet.

    Der Status der Unit ist folgender:

    Code
    pi@raspberrypi:~/messen $ sudo systemctl status Werkstattklima.service
    ● Werkstattklima.service - Werkstattklima Service
    Loaded: loaded (/etc/systemd/system/Werkstattklima.service; enabled; vendor preset: enabled)
    Active: inactive (dead) since Sat 2018-12-08 12:27:11 CET; 16s ago
    Process: 519 ExecStart=/usr/bin/python /home/pi/messen/Logging-Test.py (code=exited, status=0/SUCCESS)
    Main PID: 519 (code=exited, status=0/SUCCESS)
    
    Dez 08 12:27:10 raspberrypi systemd[1]: Started Werkstattklima Service.
    Dez 08 12:27:11 raspberrypi python[519]: Programm ausgeführt

    Da das Script nicht in einer Endlosschleife läuft wurde es einmal abgearbeitet. Sieht man ja auch an der Meldung "Programm ausgeführt"... Es wird nur keine Loggdatei erstellt!?

    Weis jemand Rat?

    Danke vorab schonmal!

    Gruß RM:)

  • Keine Logging-Ausgaben bei Script start über eine Systemd Unit!?? Schau mal ob du hier fündig wirst!

  • Hi llutz,

    mit absolutem Pfad zur Loggdatei funktioniert es jetzt.

    Ist schon verwirrend, bei "normalem" Scriptstart wird die Loggdatei im selben Verzeichnis wie das Script selbst angelegt und beim Start über die Systemd-Unit nicht. Den Fehler sucht mal erst mal wo anders als bei absoluten Pfadangaben :/...

    OK, wieder was gelernt... absolute Pfade verwenden!

    :danke_ATDE:

    Gruß RM

  • Wenn du das Script manuell so aufrufst, dürfte das Ergebnis gleich sein (Logfile landet im $HOME bzw. dem Verzeichnis, in dem du dich gerade befindest):

    /usr/bin/python /home/pi/messen/Logging-Test.py

    Du startest manuell aber wahrscheinlich eher so, oder:

    cd /home/pi/messen/

    python ./Logging-Test.py

    Denn dabei wäre das aktuelle Verzeichnis ($PWD) /home/pi/messen und somit landet auch das Logfile dort.

    Wenn du nichts zu sagen hast, sag einfach nichts.

  • Hast recht,

    mein Denkfehler war, dass ich dachte, das Loggfile landet automatisch auf der Verzeichnisebene des Scripts.

    Es landet aber im aktuellen Verzeichnis! das ist beim Starten über Systemd eben ein anderes..

    Zu gern würde mich noch interessieren, wo denn das Logfile fälschlicherweise gelandet ist? :/

  • pi@raspberrypi:~/messen $ sudo stat /root/programm.log

    stat: der Aufruf von stat für '/root/programm.log' ist nicht möglich: Datei oder Verzeichnis nicht gefunden

    Da liegt sie nicht, na ja, nicht weiter schlimm..

  • Hallo,

    du kannst dem logging-Modul den Pfad, in dem das Skript liegt, mitgeben:

    Python
    import os
    current_path , _ = os.path.split(os.path.abspath(__file__))

    `current_path` enthält dann den absoluten Pfad, in dem das Skript liegt.

    oder, mit dem neueren pathlib Modul:

    Code
    import pathlib
    path = pathlib.Path(__file__)
    another_current_path = path.resolve().parent

    Gruß, noisefloor

  • Falls es dich interessiert, ...

    Es besteht auch die Möglichkeit das du das Log System von systemd benutzt. Die Logs lassen sich dann mittels journalctl betrachten.

    Hab mir hierfür ein Modul vorbereitet, welches dann selbstständig prüft, ob das eigentliche Skript manuell oder per Systemd aufgerufen worden ist, Abhängig dessen erfolgt dann die Ausgabe der Logmeldung in systemd oder per Stream (kann man aber auch nach belieben noch anpassen)

    Logging mit systemd-python

    und

    Doppeltes Fehlerlogging mit Systemd

Jetzt mitmachen!

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