diff options
| -rw-r--r-- | python/daemon.py | 51 |
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().""" |
