~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to loggerhead/daemon.py

  • Committer: John Arbash Meinel
  • Date: 2011-03-18 09:39:01 UTC
  • mfrom: (439.1.1 logging-trivial)
  • Revision ID: john@arbash-meinel.com-20110318093901-56t8eepvwp2avnaz
Remove loggers that weren't being used (maxb, spiv)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# daemon code from ASPN
 
2
#
2
3
 
3
4
import os
4
 
import sys
5
5
 
6
6
 
7
7
def daemonize(pidfile, home):
10
10
    background as a daemon.
11
11
    """
12
12
 
13
 
    UMASK = 0
14
13
    WORKDIR = "/"
15
14
    REDIRECT_TO = getattr(os, 'devnull', '/dev/null')
16
15
    MAXFD = 1024
20
19
    except OSError, e:
21
20
        raise Exception("%s [%d]" % (e.strerror, e.errno))
22
21
 
23
 
    if (pid == 0):      # The first child.
 
22
    if pid == 0:      # The first child.
24
23
        os.setsid()
25
24
 
26
25
        try:
27
 
            pid = os.fork()     # Fork a second child.
 
26
            pid = os.fork()     # Fork a second child.
28
27
        except OSError, e:
29
 
            raise Exception, "%s [%d]" % (e.strerror, e.errno)
 
28
            raise Exception("%s [%d]" % (e.strerror, e.errno))
30
29
 
31
 
        if (pid == 0):  # The second child.
 
30
        if pid == 0:  # The second child.
32
31
            os.chdir(WORKDIR)
33
 
            os.umask(UMASK)
34
32
        else:
35
 
            os._exit(0) # Exit parent (the first child) of the second child.
 
33
            os._exit(0) # Exit parent (the first child) of the second child.
36
34
    else:
37
 
        os._exit(0)     # Exit parent of the first child.
38
 
 
39
 
    #import resource            # Resource usage information.
40
 
    #maxfd = resource.getrlimit(resource.RLIMIT_NOFILE)[1]
41
 
    #if (maxfd == resource.RLIM_INFINITY):
42
 
    #    maxfd = MAXFD
43
 
  
44
 
    # Iterate through and close all file descriptors.
45
 
    #for fd in range(3, maxfd):
46
 
    #    try:
47
 
    #        os.close(fd)
48
 
    #    except OSError:        # ERROR, fd wasn't open to begin with (ignored)
49
 
    #        pass
50
 
 
51
 
    # This call to open is guaranteed to return the lowest file descriptor,
52
 
    # which will be 0 (stdin), since it was closed above.
53
 
    #os.open(REDIRECT_TO, os.O_RDWR)    # standard input (0)
54
 
 
55
 
    # Duplicate standard input to standard output and standard error.
56
 
    #os.dup2(0, 1)                      # standard output (1)
57
 
    #os.dup2(0, 2)                      # standard error (2)
 
35
        os._exit(0)     # Exit parent of the first child.
 
36
 
 
37
    import resource            # Resource usage information.
 
38
    maxfd = resource.getrlimit(resource.RLIMIT_NOFILE)[1]
 
39
    if (maxfd == resource.RLIM_INFINITY):
 
40
        maxfd = MAXFD
 
41
 
 
42
    fd = os.open(REDIRECT_TO, os.O_RDONLY)
 
43
    os.dup2(fd, 0)
 
44
    fd = os.open(REDIRECT_TO, os.O_WRONLY)
 
45
    os.dup2(fd, 1)
 
46
    os.dup2(fd, 2)
 
47
 
 
48
    # Iterate through and close all other file descriptors.
 
49
    for fd in range(3, maxfd):
 
50
        try:
 
51
            os.close(fd)
 
52
        except OSError:        # ERROR, fd wasn't open to begin with (ignored)
 
53
            pass
58
54
 
59
55
    f = open(pidfile, 'w')
60
56
    f.write('%d\n' % (os.getpid(),))
61
 
    f.write('%s\n' % (home,))
62
 
    f.close()
 
57
    f.close()
 
58
 
 
59
 
 
60
def is_running(pidfile):
 
61
    try:
 
62
        f = open(pidfile, 'r')
 
63
    except IOError:
 
64
        return False
 
65
    pid = int(f.readline())
 
66
    f.close()
 
67
    try:
 
68
        os.kill(pid, 0)
 
69
    except OSError:
 
70
        # no such process
 
71
        return False
 
72
    return True