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