summaryrefslogtreecommitdiff
path: root/test/integration/roles/test_service/files/ansible_test_service
blob: 66c3a3a2d4c958a9422adf684231cba8baa6c222 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/usr/bin/env python

# this is mostly based off of the code found here:
# http://code.activestate.com/recipes/278731-creating-a-daemon-the-python-way/

import os
import resource
import sys
import time

UMASK = 0
WORKDIR = "/"
MAXFD = 1024

if (hasattr(os, "devnull")):
   REDIRECT_TO = os.devnull
else:
   REDIRECT_TO = "/dev/null"

def createDaemon():
   try:
      pid = os.fork()
   except OSError, e:
      raise Exception, "%s [%d]" % (e.strerror, e.errno)

   if (pid == 0):
      os.setsid()

      try:
         pid = os.fork()
      except OSError, e:
         raise Exception, "%s [%d]" % (e.strerror, e.errno)

      if (pid == 0):
         os.chdir(WORKDIR)
         os.umask(UMASK)
      else:
         f = open('/var/run/ansible_test_service.pid', 'w')
         f.write("%d\n" % pid)
         f.close()
         os._exit(0)
   else:
      os._exit(0)

   maxfd = resource.getrlimit(resource.RLIMIT_NOFILE)[1]
   if (maxfd == resource.RLIM_INFINITY):
      maxfd = MAXFD
  
   for fd in range(0, maxfd):
      try:
         os.close(fd)
      except OSError:	# ERROR, fd wasn't open to begin with (ignored)
         pass

   os.open(REDIRECT_TO, os.O_RDWR)
   os.dup2(0, 1)
   os.dup2(0, 2)

   return(0)

if __name__ == "__main__":

   retCode = createDaemon()

   while True:
       time.sleep(1000)