/bangkokhotel/lib/python2.5/site-packages/django/utils/daemonize.py
https://bitbucket.org/luisrodriguez/bangkokhotel · Python · 58 lines · 44 code · 3 blank · 11 comment · 9 complexity · 1f67b6c151ceec92039468634a757526 MD5 · raw file
- import os
- import sys
- if os.name == 'posix':
- def become_daemon(our_home_dir='.', out_log='/dev/null',
- err_log='/dev/null', umask=022):
- "Robustly turn into a UNIX daemon, running in our_home_dir."
- # First fork
- try:
- if os.fork() > 0:
- sys.exit(0) # kill off parent
- except OSError, e:
- sys.stderr.write("fork #1 failed: (%d) %s\n" % (e.errno, e.strerror))
- sys.exit(1)
- os.setsid()
- os.chdir(our_home_dir)
- os.umask(umask)
- # Second fork
- try:
- if os.fork() > 0:
- os._exit(0)
- except OSError, e:
- sys.stderr.write("fork #2 failed: (%d) %s\n" % (e.errno, e.strerror))
- os._exit(1)
- si = open('/dev/null', 'r')
- so = open(out_log, 'a+', 0)
- se = open(err_log, 'a+', 0)
- os.dup2(si.fileno(), sys.stdin.fileno())
- os.dup2(so.fileno(), sys.stdout.fileno())
- os.dup2(se.fileno(), sys.stderr.fileno())
- # Set custom file descriptors so that they get proper buffering.
- sys.stdout, sys.stderr = so, se
- else:
- def become_daemon(our_home_dir='.', out_log=None, err_log=None, umask=022):
- """
- If we're not running under a POSIX system, just simulate the daemon
- mode by doing redirections and directory changing.
- """
- os.chdir(our_home_dir)
- os.umask(umask)
- sys.stdin.close()
- sys.stdout.close()
- sys.stderr.close()
- if err_log:
- sys.stderr = open(err_log, 'a', 0)
- else:
- sys.stderr = NullDevice()
- if out_log:
- sys.stdout = open(out_log, 'a', 0)
- else:
- sys.stdout = NullDevice()
- class NullDevice:
- "A writeable object that writes to nowhere -- like /dev/null."
- def write(self, s):
- pass