def daemonize(): ''' Daemonize a process ''' if 'os' in os.environ: if os.environ['os'].startswith('Windows'): import ctypes if ctypes.windll.shell32.IsUserAnAdmin() == 0: import win32api executablepath = sys.executable pypath = executablepath.split('\\') win32api.ShellExecute( 0, 'runas', executablepath, os.path.join(pypath[0], os.sep, pypath[1], 'Lib\\site-packages\\salt\\utils\\saltminionservice.py'), os.path.join(pypath[0], os.sep, pypath[1]), 0 ) sys.exit(0) else: import saltminionservice import win32serviceutil import win32service import winerror servicename = 'salt-minion' try: status = win32serviceutil.QueryServiceStatus(servicename) except win32service.error, details: if details[0]==winerror.ERROR_SERVICE_DOES_NOT_EXIST: saltminionservice.instart(saltminionservice.MinionService, servicename, 'Salt Minion') sys.exit(0) if status[1] == win32service.SERVICE_RUNNING: win32serviceutil.StopServiceWithDeps(servicename) win32serviceutil.StartService(servicename) else: win32serviceutil.StartService(servicename) sys.exit(0)
def daemonize(): ''' Daemonize a process ''' if 'os' in os.environ: if os.environ['os'].startswith('Windows'): import ctypes if ctypes.windll.shell32.IsUserAnAdmin() == 0: import win32api executablepath = sys.executable pypath = executablepath.split('\\') win32api.ShellExecute( 0, 'runas', executablepath, os.path.join(pypath[0], os.sep, pypath[1], 'Lib\\site-packages\\salt\\utils\\saltminionservice.py'), os.path.join(pypath[0], os.sep, pypath[1]), 0 ) sys.exit(0) else: import saltminionservice import win32serviceutil import win32service import winerror servicename = 'salt-minion' try: status = win32serviceutil.QueryServiceStatus(servicename) except win32service.error as details: if details[0]==winerror.ERROR_SERVICE_DOES_NOT_EXIST: saltminionservice.instart(saltminionservice.MinionService, servicename, 'Salt Minion') sys.exit(0) if status[1] == win32service.SERVICE_RUNNING: win32serviceutil.StopServiceWithDeps(servicename) win32serviceutil.StartService(servicename) else: win32serviceutil.StartService(servicename) sys.exit(0) try: pid = os.fork() if pid > 0: # exit first parent sys.exit(0) except OSError as exc: msg = 'fork #1 failed: {0} ({1})'.format(exc.errno, exc.strerror) log.error(msg) sys.exit(1) # decouple from parent environment os.chdir("/") os.setsid() os.umask(18) # do second fork try: pid = os.fork() if pid > 0: sys.exit(0) except OSError as exc: msg = 'fork #2 failed: {0} ({1})' log.error(msg.format(exc.errno, exc.strerror)) sys.exit(1) dev_null = open('/dev/null', 'rw') os.dup2(dev_null.fileno(), sys.stdin.fileno()) os.dup2(dev_null.fileno(), sys.stdout.fileno()) os.dup2(dev_null.fileno(), sys.stderr.fileno())
def daemonize(): ''' Daemonize a process ''' if 'os' in os.environ: if os.environ['os'].startswith('Windows'): import ctypes if ctypes.windll.shell32.IsUserAnAdmin() == 0: import win32api executablepath = sys.executable pypath = executablepath.split('\\') win32api.ShellExecute( 0, 'runas', executablepath, os.path.join( pypath[0], os.sep, pypath[1], 'Lib\\site-packages\\salt\\utils\\saltminionservice.py' ), os.path.join(pypath[0], os.sep, pypath[1]), 0) sys.exit(0) else: import saltminionservice import win32serviceutil import win32service import winerror servicename = 'salt-minion' try: status = win32serviceutil.QueryServiceStatus(servicename) except win32service.error as details: if details[0] == winerror.ERROR_SERVICE_DOES_NOT_EXIST: saltminionservice.instart( saltminionservice.MinionService, servicename, 'Salt Minion') sys.exit(0) if status[1] == win32service.SERVICE_RUNNING: win32serviceutil.StopServiceWithDeps(servicename) win32serviceutil.StartService(servicename) else: win32serviceutil.StartService(servicename) sys.exit(0) try: pid = os.fork() if pid > 0: # exit first parent sys.exit(0) except OSError as exc: msg = 'fork #1 failed: {0} ({1})'.format(exc.errno, exc.strerror) log.error(msg) sys.exit(1) # decouple from parent environment os.chdir("/") os.setsid() os.umask(18) # do second fork try: pid = os.fork() if pid > 0: sys.exit(0) except OSError as exc: msg = 'fork #2 failed: {0} ({1})' log.error(msg.format(exc.errno, exc.strerror)) sys.exit(1) dev_null = open('/dev/null', 'rw') os.dup2(dev_null.fileno(), sys.stdin.fileno()) os.dup2(dev_null.fileno(), sys.stdout.fileno()) os.dup2(dev_null.fileno(), sys.stderr.fileno())