diff --git a/core/main.py b/core/main.py index 7e717a1..79b9622 100644 --- a/core/main.py +++ b/core/main.py @@ -43,8 +43,9 @@ signal.signal(signal.SIGTERM, _handle_sigterm) def main(): - # Инициализируем state сразу, чтобы _LAST_STATE был готов при любом выходе + # Инициализируем state сразу, чтобы _LAST_STATE был готов при любом выходe state.load_state() + parser = argparse.ArgumentParser(description="Docker Service Migration Tool") parser.add_argument("--mode", choices=["source", "target"], help="Режим работы") parser.add_argument("--resume", action="store_true", help="Продолжить после ошибки") diff --git a/core/state.py b/core/state.py index a61c6ce..6c6dc61 100644 --- a/core/state.py +++ b/core/state.py @@ -14,29 +14,22 @@ from datetime import datetime STATE_FILE = None _LAST_STATE = None +# Жёсткий путь для state.json — один, навсегда +STATE_PATH = os.path.join(os.path.expanduser("~"), ".migrate", "state.json") + def _state_path(): global STATE_FILE if STATE_FILE: return STATE_FILE - # State никогда не храним рядом со скриптом — install.sh его удалит - candidates = [ - os.path.join(os.path.expanduser("~"), ".migrate", "state.json"), - "/var/tmp/docker-migrate/state.json", - ] - for c in candidates: - d = os.path.dirname(c) - if os.path.isdir(d): - STATE_FILE = c - return c - try: + # Всегда используем ~/.migrate/state.json + d = os.path.dirname(STATE_PATH) + try: + if not os.path.isdir(d): os.makedirs(d, exist_ok=True) - STATE_FILE = c - return c - except PermissionError: - continue - fallback = os.path.join(os.getcwd(), ".migrate-state.json") - STATE_FILE = fallback - return fallback + except Exception: + pass + STATE_FILE = STATE_PATH + return STATE_FILE def load_state():