Logging hinzugefügt
parent
d199ffb076
commit
98dbc27835
@ -0,0 +1,10 @@
|
|||||||
|
# Uhr
|
||||||
|
|
||||||
|
## Benötigte Software
|
||||||
|
|
||||||
|
apt install iputils-arping python3-systemd
|
||||||
|
|
||||||
|
|
||||||
|
Pythonmodule
|
||||||
|
|
||||||
|
sudo pip3 install toml gpiozero adafruit-circuitpython-neopixel
|
@ -0,0 +1,81 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
"""
|
||||||
|
Beschreibung:
|
||||||
|
Hilfskript zum Erstellen einer logging Instanz in Abhängigkeit, ob das Skript manuell gestartet worden ist oder
|
||||||
|
ob das Skript per Service Unit gestartet wurde
|
||||||
|
Abhängig dessen wird entweder die Logging Instanz mit einem JournalHandler erstellt (Service Unit)
|
||||||
|
oder mit einem StreamHandler (manuell)
|
||||||
|
Author: Hofei
|
||||||
|
Datum: 03.08.2018
|
||||||
|
Version: 0.1
|
||||||
|
"""
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import shlex
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
from systemd import journal
|
||||||
|
|
||||||
|
|
||||||
|
def __setup_logging(loglevel, frm, startmethode, unitname):
|
||||||
|
"""
|
||||||
|
Erstellt die Logger Instanz für das Skript
|
||||||
|
"""
|
||||||
|
logger = logging.getLogger()
|
||||||
|
logger.setLevel(loglevel)
|
||||||
|
logger.handlers = []
|
||||||
|
if startmethode == "auto":
|
||||||
|
log_handler = journal.JournalHandler(SYSLOG_IDENTIFIER=unitname)
|
||||||
|
|
||||||
|
else:
|
||||||
|
log_handler = logging.StreamHandler()
|
||||||
|
log_handler.setLevel(loglevel)
|
||||||
|
log_handler.setFormatter(frm)
|
||||||
|
logger.addHandler(log_handler)
|
||||||
|
return logger
|
||||||
|
|
||||||
|
|
||||||
|
def __get_service_unit_pid(unitname):
|
||||||
|
"""Ermittelt ob das ausführende Skript mit einer Service Unit gestartet worden ist, wenn ja so ist das
|
||||||
|
Ergebnis (pid_service_unit) != 0"""
|
||||||
|
cmd = "systemctl show -p MainPID {}".format(unitname)
|
||||||
|
cmd = shlex.split(cmd)
|
||||||
|
antwort = subprocess.run(cmd, stdout=subprocess.PIPE)
|
||||||
|
ausgabe = antwort.stdout
|
||||||
|
# strip entfernt \n, split teilt am = in eine Liste und [1] weißt die Zahl in die Variable zu
|
||||||
|
pid_service_unit = int(ausgabe.decode().strip().split("=")[1])
|
||||||
|
return pid_service_unit
|
||||||
|
|
||||||
|
|
||||||
|
def __get_startmethode(unitname):
|
||||||
|
"""Verglicht die PID vom skript mit der pid Service Unit Prüfung
|
||||||
|
wenn die Nummern gleich sind wird auf auto gestellt, wenn nicht auf manuell"""
|
||||||
|
pid_service_unit = __get_service_unit_pid(unitname)
|
||||||
|
pid_skript = os.getpid()
|
||||||
|
if pid_service_unit == pid_skript:
|
||||||
|
startmethode = "auto"
|
||||||
|
else:
|
||||||
|
startmethode = "manuell"
|
||||||
|
return startmethode
|
||||||
|
|
||||||
|
|
||||||
|
def __set_loggerformat(startmethode):
|
||||||
|
"""Stellt die passende Formattierung ein"""
|
||||||
|
if startmethode == "auto":
|
||||||
|
frm = logging.Formatter("%(levelname)s: %(message)s", "%d.%m.%Y %H:%M:%S")
|
||||||
|
else:
|
||||||
|
frm = logging.Formatter("%(asctime)s %(levelname)s: %(message)s", "%d.%m.%Y %H:%M:%S")
|
||||||
|
return frm
|
||||||
|
|
||||||
|
|
||||||
|
def create_logger(unitname, loglevel):
|
||||||
|
"""Dies ist die aufzurufende Funktion bei der Verwendung des Moduls von außen
|
||||||
|
Liefert die fertige Logging Instanz zurück"""
|
||||||
|
startmethode = __get_startmethode(unitname)
|
||||||
|
frm = __set_loggerformat(startmethode)
|
||||||
|
return __setup_logging(loglevel, frm, startmethode, unitname)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
logger = create_logger("testunit", 10)
|
||||||
|
logger.debug("Testnachricht")
|
@ -0,0 +1,10 @@
|
|||||||
|
# /etc/systemd/system/uhr.service
|
||||||
|
[Unit]
|
||||||
|
Description=Uhr starten
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/bin/python3 /home/pi/uhr/uhr.py
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
Loading…
Reference in New Issue