diff --git a/imageroot/bin/wait-startup b/imageroot/bin/wait-startup index d9bcef2..d4e8f86 100755 --- a/imageroot/bin/wait-startup +++ b/imageroot/bin/wait-startup @@ -6,7 +6,6 @@ # import sys -import json import time import subprocess @@ -16,16 +15,23 @@ def occ(args): return (p.returncode, p.stdout) # wait after nextcloud-app is ready +exit_code_messages = {1: "maintenance mode enabled", 2: "needs DB upgrade"} max_tries = 60 i = 0 +last_ret = None while i < max_tries: i = i+1 try: - ret, out = occ(["status", "--output", "json"]) - status = json.loads(out) - if status["installed"]: + ret, out = occ(["status", "-e"]) + last_ret = ret + if ret == 0: break - print(f"wait-startup: waiting for nextcloud-app ({i})", file=sys.stderr) - time.sleep(1) + status_msg = exit_code_messages.get(ret, "not ready") + print(f"wait-startup: waiting for nextcloud-app ({i}): occ status exit code={ret} ({status_msg})", file=sys.stderr) except Exception as e: - continue + print(f"wait-startup: exception ({i}): {e}", file=sys.stderr) + time.sleep(1) +else: + status_msg = exit_code_messages.get(last_ret, "not ready") + print(f"wait-startup: Nextcloud did not become ready in time (last status: {status_msg})", file=sys.stderr) + sys.exit(1)