aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/daemon.py51
1 files changed, 25 insertions, 26 deletions
diff --git a/python/daemon.py b/python/daemon.py
index cb2c6bd3..a158d4e6 100644
--- a/python/daemon.py
+++ b/python/daemon.py
@@ -2,41 +2,41 @@
import sys, os, time, atexit, signal
-class daemon:
+class Daemon:
"""A generic daemon class.
Usage: subclass the daemon class and override the run() method."""
def __init__(self, pidfile): self.pidfile = pidfile
-
+
def daemonize(self):
"""Deamonize class. UNIX double fork mechanism."""
- try:
- pid = os.fork()
+ try:
+ pid = os.fork()
if pid > 0:
# exit first parent
- sys.exit(0)
- except OSError as err:
+ sys.exit(0)
+ except OSError as err:
sys.stderr.write('fork #1 failed: {0}\n'.format(err))
sys.exit(1)
-
+
# decouple from parent environment
- os.chdir('/')
- os.setsid()
- os.umask(0)
-
+ os.chdir('/')
+ os.setsid()
+ os.umask(0)
+
# do second fork
- try:
- pid = os.fork()
+ try:
+ pid = os.fork()
if pid > 0:
# exit from second parent
- sys.exit(0)
- except OSError as err:
+ sys.exit(0)
+ except OSError as err:
sys.stderr.write('fork #2 failed: {0}\n'.format(err))
- sys.exit(1)
-
+ sys.exit(1)
+
# redirect standard file descriptors
sys.stdout.flush()
sys.stderr.flush()
@@ -47,14 +47,14 @@ class daemon:
os.dup2(si.fileno(), sys.stdin.fileno())
os.dup2(so.fileno(), sys.stdout.fileno())
os.dup2(se.fileno(), sys.stderr.fileno())
-
+
# write pidfile
atexit.register(self.delpid)
pid = str(os.getpid())
with open(self.pidfile,'w+') as f:
f.write(pid + '\n')
-
+
def delpid(self):
os.remove(self.pidfile)
@@ -68,13 +68,13 @@ class daemon:
pid = int(pf.read().strip())
except IOError:
pid = None
-
+
if pid:
message = "pidfile {0} already exist. " + \
"Daemon already running?\n"
sys.stderr.write(message.format(self.pidfile))
sys.exit(1)
-
+
# Start the daemon
self.daemonize()
self.run()
@@ -88,14 +88,14 @@ class daemon:
pid = int(pf.read().strip())
except IOError:
pid = None
-
+
if not pid:
message = "pidfile {0} does not exist. " + \
"Daemon not running?\n"
sys.stderr.write(message.format(self.pidfile))
return # not an error in a restart
- # Try killing the daemon process
+ # Try killing the daemon process
try:
while 1:
os.kill(pid, signal.SIGTERM)
@@ -116,7 +116,6 @@ class daemon:
def run(self):
"""You should override this method when you subclass Daemon.
-
- It will be called after the process has been daemonized by
- start() or restart()."""
+ It will be called after the process has been daemonized by
+ start() or restart()."""