diff options
Diffstat (limited to 'bin/utils/daemon.py')
-rw-r--r-- | bin/utils/daemon.py | 73 |
1 files changed, 0 insertions, 73 deletions
diff --git a/bin/utils/daemon.py b/bin/utils/daemon.py deleted file mode 100644 index 3744222f2..000000000 --- a/bin/utils/daemon.py +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/python - -''' - This module is used to fork the current process into a daemon. - Almost none of this is necessary (or advisable) if your daemon - is being started by inetd. In that case, stdin, stdout and stderr are - all set up for you to refer to the network connection, and the fork()s - and session manipulation should not be done (to avoid confusing inetd). - Only the chdir() and umask() steps remain as useful. - References: - UNIX Programming FAQ - 1.7 How do I get my program to act like a daemon? - http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC16 - Advanced Programming in the Unix Environment - W. Richard Stevens, 1992, Addison-Wesley, ISBN 0-201-56317-7. - - History: - 2001/07/10 by Jürgen Hermann - 2002/08/28 by Noah Spurrier - 2003/02/24 by Clark Evans - - http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66012 -''' -import sys, os, time -from signal import SIGTERM - -def daemonize(stdout='/dev/null', stderr=None, stdin='/dev/null', pidfile=None, startmsg=None): - ''' - This forks the current process into a daemon. - The stdin, stdout, and stderr arguments are file names that - will be opened and be used to replace the standard file descriptors - in sys.stdin, sys.stdout, and sys.stderr. - These arguments are optional and default to /dev/null. - Note that stderr is opened unbuffered, so - if it shares a file with stdout then interleaved output - may not appear in the order that you expect. - ''' - # Do first fork. - try: - pid = os.fork() - if pid > 0: sys.exit(0) # Exit first parent. - except OSError, e: - sys.stderr.write("fork #1 failed: (%d) %s\n" % (e.errno, e.strerror)) - sys.exit(1) - - # Decouple from parent environment. - os.chdir("/") - os.umask(0) - os.setsid() - - # Do second fork. - try: - pid = os.fork() - if pid > 0: sys.exit(0) # Exit second parent. - except OSError, e: - sys.stderr.write("fork #2 failed: (%d) %s\n" % (e.errno, e.strerror)) - sys.exit(1) - - # Open file descriptors and print start message - if not stderr: stderr = stdout - si = file(stdin, 'r') - so = file(stdout, 'a+') - se = file(stderr, 'a+', 0) - pid = str(os.getpid()) - if startmsg: - sys.stderr.write("\n%s\n" % startmsg % pid) - sys.stderr.flush() - if pidfile: file(pidfile,'w+').write("%s\n" % pid) - - # Redirect standard file descriptors. - os.dup2(si.fileno(), sys.stdin.fileno()) - os.dup2(so.fileno(), sys.stdout.fileno()) - os.dup2(se.fileno(), sys.stderr.fileno()) |