Replaced tabs with whitespaces.

This commit is contained in:
Johannes Findeisen 2021-11-14 04:57:09 +01:00
commit 8811a1c293

View file

@ -19,94 +19,94 @@ import signal
# TODO: Check why pid files are not being deleted when sending the TERM signal # TODO: Check why pid files are not being deleted when sending the TERM signal
class Daemon: class Daemon:
def __init__(self, pid_file): def __init__(self, pid_file):
self.pid_file = pid_file self.pid_file = pid_file
def daemonize(self): def daemonize(self):
try: try:
pid = os.fork() pid = os.fork()
if pid > 0: if pid > 0:
sys.exit(0) sys.exit(0)
except OSError as err: except OSError as err:
sys.stderr.write('fork #1 failed: {0}\n'.format(err)) sys.stderr.write('fork #1 failed: {0}\n'.format(err))
sys.exit(1) sys.exit(1)
os.chdir('/') os.chdir('/')
os.setsid() os.setsid()
os.umask(0) os.umask(0)
try: try:
pid = os.fork() pid = os.fork()
if pid > 0: if pid > 0:
sys.exit(0) sys.exit(0)
except OSError as err: except OSError as err:
sys.stderr.write('fork #2 failed: {0}\n'.format(err)) sys.stderr.write('fork #2 failed: {0}\n'.format(err))
sys.exit(1) sys.exit(1)
sys.stdout.flush() sys.stdout.flush()
sys.stderr.flush() sys.stderr.flush()
si = open(os.devnull, 'r') si = open(os.devnull, 'r')
so = open(os.devnull, 'a+') so = open(os.devnull, 'a+')
se = open(os.devnull, 'a+') se = open(os.devnull, 'a+')
os.dup2(si.fileno(), sys.stdin.fileno()) os.dup2(si.fileno(), sys.stdin.fileno())
os.dup2(so.fileno(), sys.stdout.fileno()) os.dup2(so.fileno(), sys.stdout.fileno())
os.dup2(se.fileno(), sys.stderr.fileno()) os.dup2(se.fileno(), sys.stderr.fileno())
atexit.register(self.del_pid) atexit.register(self.del_pid)
pid = str(os.getpid()) pid = str(os.getpid())
with open(self.pid_file, 'w+') as f: with open(self.pid_file, 'w+') as f:
f.write(pid + '\n') f.write(pid + '\n')
def del_pid(self): def del_pid(self):
os.remove(self.pid_file) os.remove(self.pid_file)
def start(self): def start(self):
try: try:
with open(self.pid_file, 'r') as pf: with open(self.pid_file, 'r') as pf:
pid = int(pf.read().strip()) pid = int(pf.read().strip())
except IOError: except IOError:
pid = None pid = None
if pid: if pid:
message = "pid_file {0} already exist. Daemon already running?\n" message = "pid_file {0} already exist. Daemon already running?\n"
sys.stderr.write(message.format(self.pid_file)) sys.stderr.write(message.format(self.pid_file))
sys.exit(1) sys.exit(1)
self.daemonize() self.daemonize()
self.run() self.run()
def stop(self): def stop(self):
try: try:
with open(self.pid_file, 'r') as pf: with open(self.pid_file, 'r') as pf:
pid = int(pf.read().strip()) pid = int(pf.read().strip())
except IOError: except IOError:
pid = None pid = None
if not pid: if not pid:
message = "pid_file {0} does not exist. Daemon not running?\n" message = "pid_file {0} does not exist. Daemon not running?\n"
sys.stderr.write(message.format(self.pid_file)) sys.stderr.write(message.format(self.pid_file))
return return
try: try:
while 1: while 1:
os.kill(pid, signal.SIGTERM) os.kill(pid, signal.SIGTERM)
time.sleep(0.1) time.sleep(0.1)
except OSError as err: except OSError as err:
e = str(err.args) e = str(err.args)
if e.find("No such process") > 0: if e.find("No such process") > 0:
if os.path.exists(self.pid_file): if os.path.exists(self.pid_file):
os.remove(self.pid_file) os.remove(self.pid_file)
else: else:
print(str(err.args)) print(str(err.args))
sys.exit(1) sys.exit(1)
def restart(self): def restart(self):
self.stop() self.stop()
self.start() self.start()
def run(self): def run(self):
"""Override this method when you subclass Daemon. """Override this method when you subclass Daemon.
It will be called after the process has been daemonized by It will be called after the process has been daemonized by
start() or restart().""" start() or restart()."""