5
def become_daemon(our_home_dir='.', out_log='/dev/null',
6
err_log='/dev/null', umask=022):
7
"Robustly turn into a UNIX daemon, running in our_home_dir."
11
sys.exit(0) # kill off parent
13
sys.stderr.write("fork #1 failed: (%d) %s\n" % (e.errno, e.strerror))
16
os.chdir(our_home_dir)
24
sys.stderr.write("fork #2 failed: (%d) %s\n" % (e.errno, e.strerror))
27
si = open('/dev/null', 'r')
28
so = open(out_log, 'a+', 0)
29
se = open(err_log, 'a+', 0)
30
os.dup2(si.fileno(), sys.stdin.fileno())
31
os.dup2(so.fileno(), sys.stdout.fileno())
32
os.dup2(se.fileno(), sys.stderr.fileno())
33
# Set custom file descriptors so that they get proper buffering.
34
sys.stdout, sys.stderr = so, se
36
def become_daemon(our_home_dir='.', out_log=None, err_log=None, umask=022):
38
If we're not running under a POSIX system, just simulate the daemon
39
mode by doing redirections and directory changing.
41
os.chdir(our_home_dir)
47
sys.stderr = open(err_log, 'a', 0)
49
sys.stderr = NullDevice()
51
sys.stdout = open(out_log, 'a', 0)
53
sys.stdout = NullDevice()
56
"A writeable object that writes to nowhere -- like /dev/null."