Add Main.py
parent
15f510a3b6
commit
480d6e9a11
87
main.py
87
main.py
|
|
@ -1,15 +1,80 @@
|
|||
## Main File für die Controller
|
||||
import exporter
|
||||
import importer
|
||||
import errorhandler
|
||||
import mail
|
||||
import mssqlconnector
|
||||
## Import von Connector
|
||||
|
||||
import sys
|
||||
import schedule
|
||||
import time
|
||||
import subprocess
|
||||
import datetime
|
||||
import os
|
||||
import datetime as dt
|
||||
import dotenv
|
||||
import psutil
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
|
||||
MAIN_DIR = os.getcwd()
|
||||
LOG_DIR = os.path.join(MAIN_DIR, 'Logs')
|
||||
os.makedirs(LOG_DIR, exist_ok=True)
|
||||
|
||||
logfile_path = os.path.join(LOG_DIR, f"main_schedule_log_{datetime.datetime.now().strftime('%Y-%m-%d')}.txt")
|
||||
|
||||
def write_log(line):
|
||||
"""Schreibt eine Zeile mit aktuellem Zeitstempel ins Logfile"""
|
||||
timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||
log_entry = f"[{timestamp}] {line}"
|
||||
print(log_entry)
|
||||
with open(logfile_path, 'a', encoding='utf-8') as f:
|
||||
f.write(log_entry + '\n' + '-' * 60 + '\n')
|
||||
|
||||
|
||||
def kill_existing_process(name):
|
||||
"""Beendet alle laufenden Prozesse mit passendem Namen (case-insensitive, mit/ohne .exe)"""
|
||||
killed = False
|
||||
base_name = name.lower().replace('.exe', '')
|
||||
for proc in psutil.process_iter(['name']):
|
||||
try:
|
||||
pname = proc.info['name'].lower().replace('.exe', '')
|
||||
if pname == base_name:
|
||||
proc.kill()
|
||||
killed = True
|
||||
except (psutil.NoSuchProcess, psutil.AccessDenied):
|
||||
pass
|
||||
return killed
|
||||
|
||||
|
||||
def run_exe(name):
|
||||
"""Startet eine EXE und loggt Erfolg/Fehler"""
|
||||
write_log(f"Starte {name}...")
|
||||
|
||||
if kill_existing_process(name):
|
||||
write_log(f"Vorherige Instanz von {name} wurde beendet.")
|
||||
|
||||
try:
|
||||
result = subprocess.run([name], capture_output=True, text=True, check=False)
|
||||
if result.returncode != 0:
|
||||
write_log(f"Fehler bei {name}: {result.stderr.strip()}")
|
||||
else:
|
||||
output = result.stdout.strip()
|
||||
if output:
|
||||
write_log(f"{name} erfolgreich: {output}")
|
||||
else:
|
||||
write_log(f"{name} erfolgreich beendet (kein Output).")
|
||||
except FileNotFoundError:
|
||||
write_log(f"Fehler: {name} wurde nicht gefunden!")
|
||||
except Exception as e:
|
||||
write_log(f"Unerwarteter Fehler bei {name}: {e}")
|
||||
|
||||
|
||||
# Konfiguration
|
||||
exporter_time = int(os.getenv('EXPORTER_TIME', '10')) # Minuten
|
||||
importer_time_of_day = os.getenv('IMPORTER_TIME_OF_DAY', '23:30')
|
||||
|
||||
# Tasks registrieren
|
||||
schedule.every(exporter_time).minutes.do(lambda: run_exe('exporter.exe'))
|
||||
schedule.every().day.at(importer_time_of_day).do(lambda: run_exe('importer.exe'))
|
||||
|
||||
# Startmeldung
|
||||
write_log("Starte Task-Scheduler...")
|
||||
write_log(f"SDF - Export-Intervall: alle {exporter_time} Minuten")
|
||||
write_log(f"SDF - Import-Zeit: {importer_time_of_day}")
|
||||
|
||||
# Endlosschleife
|
||||
while True:
|
||||
schedule.run_pending()
|
||||
time.sleep(10)
|
||||
|
|
|
|||
Loading…
Reference in New Issue