#!/usr/bin/env python3 """提供健康检查,并验证平台重启容器后 /app 中的文件是否保留。""" import json import os import socket import sys import threading import time from datetime import datetime, timezone from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer from pathlib import Path PORT = int(os.getenv("PORT", "8080")) RUN_SECONDS = int(os.getenv("RUN_SECONDS", "60")) MARKER = Path(os.getenv("MARKER_FILE", "/app/restart-marker.txt")) class Handler(BaseHTTPRequestHandler): def do_GET(self) -> None: if self.path != "/health": self.send_error(404) return payload = json.dumps({"status": "ok"}).encode() self.send_response(200) self.send_header("Content-Type", "application/json") self.send_header("Content-Length", str(len(payload))) self.end_headers() self.wfile.write(payload) def log_message(self, _format: str, *_args: object) -> None: return def main() -> int: now = datetime.now(timezone.utc).astimezone().isoformat() pod_name = os.getenv("POD_NAME", socket.gethostname()) pod_uid = os.getenv("POD_UID", "unknown") existed = MARKER.exists() previous = MARKER.read_text().strip() if existed else "" print("=" * 70, flush=True) print(f"time={now}", flush=True) print(f"pod_name={pod_name}", flush=True) print(f"pod_uid={pod_uid}", flush=True) print(f"marker={MARKER}", flush=True) print(f"marker_existed_before_start={str(existed).lower()}", flush=True) print(f"marker_previous_content={previous}", flush=True) MARKER.parent.mkdir(parents=True, exist_ok=True) MARKER.write_text(f"pod={pod_name} uid={pod_uid} written_at={now}\n") print("marker_written=true", flush=True) server = ThreadingHTTPServer(("0.0.0.0", PORT), Handler) server_thread = threading.Thread(target=server.serve_forever, daemon=True) server_thread.start() print(f"health_url=http://0.0.0.0:{PORT}/health", flush=True) print(f"will_exit_normally_after={RUN_SECONDS}s", flush=True) time.sleep(RUN_SECONDS) server.shutdown() server.server_close() print("program completed; exiting normally with code 0", flush=True) return 0 if __name__ == "__main__": sys.exit(main())