Files
python_skripte/create_systemd_unit/main.py
T
jonnybravo 23b7df0037
test / build-docs (push) Successful in 1s
07092026
2026-09-07 17:02:48 +02:00

80 lines
3.0 KiB
Python

#! /usr/bin/env Python3
import os
from posix import stat
from jinja2 import Template
import subprocess
def is_root():
if os.geteuid() == 0:
return True
else:
return False
class create_unit_service():
def __init__(self,
UnitName: str,
systemd_sysfolder: str = "/etc/systemd/system",
UnitExecStart = str,
systemd_type: str = "simple",
UnitDescription: str = "Meine Unit",
UnitUser = str,
UnitWorkDir: str = "/home/jonnybravo/"
) -> None:
self.UnitName = UnitName
self.systemd_systemfolder = systemd_sysfolder
self.UnitExecStart = UnitExecStart
self.UnitDescription = UnitDescription
self.UnitWorkDir = UnitWorkDir
self.UnitUser = UnitUser
if systemd_type == "simple" or systemd_type == "oneshot":
self.systemd_type = systemd_type
else:
print("Kein richtiger Typ")
raise "systemd_type ist nicht richtig"
def create_unit(self):
UnitFile = self.systemd_systemfolder + os.sep + self.UnitName + ".service"
if os.path.exists(self.systemd_systemfolder):
if os.path.exists(UnitFile):
print("Gibt es bereits")
else:
print("Wird angelegt !!")
with open('template/LinuxUnit.j2') as f:
tmpl = Template(f.read())
with open(UnitFile, "w") as uf:
print(tmpl.render(
description = self.UnitDescription,
working_dir = self.UnitWorkDir,
exec_command = self.UnitExecStart,
user = self.UnitUser,
env_vars = {"PYTHONPATH": "."},
service_type = self.systemd_type
),file=uf)
def unit_start_and_load(self):
UnitFile = self.systemd_systemfolder + os.sep + self.UnitName + ".service"
status_daemon_reload = subprocess.run(["systemctl", "daemon-reload"])
if status_daemon_reload.returncode != 0:
raise Exception( f'Systemd reload Invalid result: { status_daemon_reload.returncode }' )
else:
print(f"{self.UnitName} wurde angelegt und kann genutzt werden !!! Ein starten oder Enable wurde bewusst nicht eingebaut.")
def delete_unit(self):
pass
if __name__ == "__main__":
if is_root():
new_unit = create_unit_service(UnitName="TestUnit",
UnitExecStart="""/usr/bin/echo "Ich bin eine TestUnit %p" """,
UnitUser="jonnybravo",
systemd_type="oneshot")
new_unit.create_unit()
new_unit.unit_start_and_load()
else:
print("Du bist nicht root führe das Skript mit sudo aus")
print('sudo python <skript>')