X-Git-Url: https://git.kaliko.me/?p=python-daemon.git;a=blobdiff_plain;f=src%2Fdaemon.py;h=c364efdad53eb7b21928b4ac74c03bdde5c0c5ac;hp=7489233bddbb8e84a297cde3b5288cffc480f983;hb=96583cae101396a40e36dc34820e0f5f7ba4c6e6;hpb=82bc69181956d577250d19894d325bb9f1aaca79 diff --git a/src/daemon.py b/src/daemon.py index 7489233..c364efd 100644 --- a/src/daemon.py +++ b/src/daemon.py @@ -20,6 +20,8 @@ class Daemon(object): Usage: subclass the Daemon class and override the run() method """ + version = "0.4" + def __init__(self, pidfile, stdin='/dev/null', stdout='/dev/null', @@ -28,6 +30,7 @@ class Daemon(object): self.stdout = stdout self.stderr = stderr self.pidfile = pidfile + self.umask = 0 def daemonize(self): """ @@ -47,7 +50,7 @@ class Daemon(object): # Decouple from parent environment os.chdir("/") os.setsid() - os.umask(0) + self.umask = os.umask(0) # Do second fork try: @@ -59,6 +62,7 @@ class Daemon(object): sys.stderr.write("fork #2 failed: %d (%s)\n" % (e.errno, e.strerror)) sys.exit(1) + self.write_pid() # redirect standard file descriptors sys.stdout.flush() sys.stderr.flush() @@ -78,12 +82,12 @@ class Daemon(object): return pid = str(os.getpid()) try: + os.umask(self.umask) file(self.pidfile, 'w').write('%s\n' % pid) - #except IOError, wpid_err: except Exception, wpid_err: - sys.stderr.write(u'Error trying to write pid file to %s: %s\n' % - (unicode(self.pidfile, 'utf-8'), wpid_err)) + sys.stderr.write(u'Error trying to write pid file: %s\n' % wpid_err) sys.exit(1) + os.umask(0) atexit.register(self.delpid) def signal_management(self): @@ -94,7 +98,11 @@ class Daemon(object): sys.exit(1) def delpid(self): - os.remove(self.pidfile) + try: + os.unlink(self.pidfile) + except OSError as err: + message = 'Error trying to remove PID file: %s\n' + sys.stderr.write(message % err) def start(self): """ @@ -113,7 +121,6 @@ class Daemon(object): sys.stderr.write(message % self.pidfile) sys.exit(1) - self.write_pid() # Start the daemon self.daemonize() self.run() @@ -139,7 +146,7 @@ class Daemon(object): pid = None if not pid: - message = "pidfile %s does not exist. Daemon not running?\n" + message = "pidfile %s does not exist. Is the Daemon running?\n" sys.stderr.write(message % self.pidfile) return # not an error in a restart @@ -148,14 +155,13 @@ class Daemon(object): os.kill(pid, SIGTERM) time.sleep(0.1) except OSError, err: - err = str(err) - if err.find("No such process") > 0: + if err.errno == 3: if os.path.exists(self.pidfile): - message = "Daemon not running? removing pid file %s.\n" + message = "Daemon's not running? removing pid file %s.\n" sys.stderr.write(message % self.pidfile) os.remove(self.pidfile) else: - print str(err) + sys.stderr.write(err.strerror) sys.exit(1) def restart(self):