From b0678ceb846fd78a2555974b64aba718579322c5 Mon Sep 17 00:00:00 2001 From: nemunaire Date: Sat, 16 May 2015 10:24:08 +0200 Subject: [PATCH] Extract deamonize to a dedicated function that can be called from anywhere --- nemubot/__init__.py | 38 ++++++++++++++++++++++++++++++++++++++ nemubot/__main__.py | 31 ++----------------------------- 2 files changed, 40 insertions(+), 29 deletions(-) diff --git a/nemubot/__init__.py b/nemubot/__init__.py index d0a2072..4a2e789 100644 --- a/nemubot/__init__.py +++ b/nemubot/__init__.py @@ -38,6 +38,44 @@ def requires_version(min=None, max=None): "but this is nemubot v%s." % (str(max), __version__)) +def daemonize(): + """Detach the running process to run as a daemon + """ + + import os + import sys + + try: + pid = os.fork() + if pid > 0: + sys.exit(0) + except OSError as err: + sys.stderr.write("Unable to fork: %s\n" % err) + sys.exit(1) + + os.setsid() + os.umask(0) + os.chdir('/') + + try: + pid = os.fork() + if pid > 0: + sys.exit(0) + except OSError as err: + sys.stderr.write("Unable to fork: %s\n" % err) + sys.exit(1) + + sys.stdout.flush() + sys.stderr.flush() + si = open(os.devnull, 'r') + so = open(os.devnull, 'a+') + se = open(os.devnull, 'a+') + + os.dup2(si.fileno(), sys.stdin.fileno()) + os.dup2(so.fileno(), sys.stdout.fileno()) + os.dup2(se.fileno(), sys.stderr.fileno()) + + def reload(): """Reload code of all Python modules used by nemubot """ diff --git a/nemubot/__main__.py b/nemubot/__main__.py index 757d3b0..8e9320e 100644 --- a/nemubot/__main__.py +++ b/nemubot/__main__.py @@ -68,35 +68,8 @@ def main(): # Daemonize if not args.debug: - try: - pid = os.fork() - if pid > 0: - sys.exit(0) - except OSError as err: - sys.stderr.write("Unable to fork: %s" % err) - sys.exit(1) - - os.setsid() - os.umask(0) - os.chdir('/') - - try: - pid = os.fork() - if pid > 0: - sys.exit(0) - except OSError as err: - sys.stderr.write("Unable to fork: %s" % err) - sys.exit(1) - - sys.stdout.flush() - sys.stderr.flush() - si = open(os.devnull, 'r') - so = open(os.devnull, 'a+') - se = open(os.devnull, 'a+') - - os.dup2(si.fileno(), sys.stdin.fileno()) - os.dup2(so.fileno(), sys.stdout.fileno()) - os.dup2(se.fileno(), sys.stderr.fileno()) + from nemubot import daemonize + daemonize() # Setup loggin interface import logging