diff --git a/homeassistant/__main__.py b/homeassistant/__main__.py index 8f12028b437..c2802e1b9c4 100644 --- a/homeassistant/__main__.py +++ b/homeassistant/__main__.py @@ -2,6 +2,7 @@ from __future__ import annotations import argparse +import faulthandler import os import platform import subprocess @@ -10,6 +11,8 @@ import threading from homeassistant.const import REQUIRED_PYTHON_VER, RESTART_EXIT_CODE, __version__ +FAULT_LOG_FILENAME = "home-assistant.log.fault" + def validate_python() -> None: """Validate that the right Python version is running.""" @@ -309,7 +312,15 @@ def main() -> int: open_ui=args.open_ui, ) - exit_code = runner.run(runtime_conf) + fault_file_name = os.path.join(config_dir, FAULT_LOG_FILENAME) + with open(fault_file_name, mode="a", encoding="utf8") as fault_file: + faulthandler.enable(fault_file) + exit_code = runner.run(runtime_conf) + faulthandler.disable() + + if os.path.getsize(fault_file_name) == 0: + os.remove(fault_file_name) + if exit_code == RESTART_EXIT_CODE and not args.runner: try_to_restart()