aboutsummaryrefslogtreecommitdiffstats
path: root/bin/utils/daemon.py
diff options
context:
space:
mode:
Diffstat (limited to 'bin/utils/daemon.py')
-rw-r--r--bin/utils/daemon.py73
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())