redirect daemon file descriptors (#2103)

This commit is contained in:
Per Sandström 2016-05-20 08:20:07 +02:00 committed by Paulus Schoutsen
parent 32f97dc578
commit f0f1fadee1
2 changed files with 36 additions and 31 deletions

View file

@ -151,6 +151,13 @@ def daemonize():
if pid > 0: if pid > 0:
sys.exit(0) sys.exit(0)
# redirect standard file descriptors to devnull
sys.stdout.flush()
sys.stderr.flush()
os.dup2(open(os.devnull, 'r').fileno(), sys.stdin.fileno())
os.dup2(open(os.devnull, 'a+').fileno(), sys.stdout.fileno())
os.dup2(open(os.devnull, 'a+').fileno(), sys.stderr.fileno())
def check_pid(pid_file): def check_pid(pid_file):
"""Check that HA is not already running.""" """Check that HA is not already running."""
@ -234,15 +241,14 @@ def setup_and_run_hass(config_dir, args, top_process=False):
'demo': {} 'demo': {}
} }
hass = bootstrap.from_config_dict( hass = bootstrap.from_config_dict(
config, config_dir=config_dir, daemon=args.daemon, config, config_dir=config_dir, verbose=args.verbose,
verbose=args.verbose, skip_pip=args.skip_pip, skip_pip=args.skip_pip, log_rotate_days=args.log_rotate_days)
log_rotate_days=args.log_rotate_days)
else: else:
config_file = ensure_config_file(config_dir) config_file = ensure_config_file(config_dir)
print('Config directory:', config_dir) print('Config directory:', config_dir)
hass = bootstrap.from_config_file( hass = bootstrap.from_config_file(
config_file, daemon=args.daemon, verbose=args.verbose, config_file, verbose=args.verbose, skip_pip=args.skip_pip,
skip_pip=args.skip_pip, log_rotate_days=args.log_rotate_days) log_rotate_days=args.log_rotate_days)
if hass is None: if hass is None:
return return

View file

@ -215,7 +215,7 @@ def mount_local_lib_path(config_dir):
# pylint: disable=too-many-branches, too-many-statements, too-many-arguments # pylint: disable=too-many-branches, too-many-statements, too-many-arguments
def from_config_dict(config, hass=None, config_dir=None, enable_log=True, def from_config_dict(config, hass=None, config_dir=None, enable_log=True,
verbose=False, daemon=False, skip_pip=False, verbose=False, skip_pip=False,
log_rotate_days=None): log_rotate_days=None):
"""Try to configure Home Assistant from a config dict. """Try to configure Home Assistant from a config dict.
@ -240,7 +240,7 @@ def from_config_dict(config, hass=None, config_dir=None, enable_log=True,
process_ha_config_upgrade(hass) process_ha_config_upgrade(hass)
if enable_log: if enable_log:
enable_logging(hass, verbose, daemon, log_rotate_days) enable_logging(hass, verbose, log_rotate_days)
hass.config.skip_pip = skip_pip hass.config.skip_pip = skip_pip
if skip_pip: if skip_pip:
@ -278,8 +278,8 @@ def from_config_dict(config, hass=None, config_dir=None, enable_log=True,
return hass return hass
def from_config_file(config_path, hass=None, verbose=False, daemon=False, def from_config_file(config_path, hass=None, verbose=False, skip_pip=True,
skip_pip=True, log_rotate_days=None): log_rotate_days=None):
"""Read the configuration file and try to start all the functionality. """Read the configuration file and try to start all the functionality.
Will add functionality to 'hass' parameter if given, Will add functionality to 'hass' parameter if given,
@ -293,7 +293,7 @@ def from_config_file(config_path, hass=None, verbose=False, daemon=False,
hass.config.config_dir = config_dir hass.config.config_dir = config_dir
mount_local_lib_path(config_dir) mount_local_lib_path(config_dir)
enable_logging(hass, verbose, daemon, log_rotate_days) enable_logging(hass, verbose, log_rotate_days)
try: try:
config_dict = config_util.load_yaml_config_file(config_path) config_dict = config_util.load_yaml_config_file(config_path)
@ -304,9 +304,8 @@ def from_config_file(config_path, hass=None, verbose=False, daemon=False,
skip_pip=skip_pip) skip_pip=skip_pip)
def enable_logging(hass, verbose=False, daemon=False, log_rotate_days=None): def enable_logging(hass, verbose=False, log_rotate_days=None):
"""Setup the logging.""" """Setup the logging."""
if not daemon:
logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.INFO)
fmt = ("%(log_color)s%(asctime)s %(levelname)s (%(threadName)s) " fmt = ("%(log_color)s%(asctime)s %(levelname)s (%(threadName)s) "
"[%(name)s] %(message)s%(reset)s") "[%(name)s] %(message)s%(reset)s")