fix(chv): 数据盘挂载升格为 oneshot 服务,浏览器启动时重解析 profile

This commit is contained in:
host committed 2026-11-08 09:45:00 +00:00
1 parent c7ffb1fe6f
commit 5dc75128f8
5 files changed
+145 -12

No files matched your search

+21
View File
@@ -254,6 +254,7 @@ class BrowserAgent:
profile_dir=None, cdp_port=None, full_browsers_dir=None):
self._factory = playwright_factory or _load_playwright
self._shots_dir = shots_dir
self._profile_explicit = bool(profile_dir)
if profile_dir:
self._profile_dir = profile_dir
self._profile_on_data_disk = profile_dir.startswith(
@@ -261,6 +262,7 @@ class BrowserAgent:
else:
self._profile_dir, self._profile_on_data_disk = \
resolve_profile_dir()
self._full_browsers_explicit = bool(full_browsers_dir)
self._full_browsers_dir = (
full_browsers_dir or resolve_full_browsers_dir(
self._profile_on_data_disk))
@@ -302,6 +304,25 @@ class BrowserAgent:
if self._context is not None and engine == self._engine:
return True, ""
self._close_context()
if not self._profile_explicit:
# 迟挂载自愈:首次启动(或旧上下文已关)时按当前挂载状态
# 重解析 profile——进程启动时数据盘若还没挂上,__init__
# 记的是回落路径;等挂盘完成后再 open 时应拿到数据盘
# profile,而不是把回落态锁死到服务重启。已跑起来的
# 上下文不受影响(上面已提前返回)。
self._profile_dir, self._profile_on_data_disk = \
resolve_profile_dir()
if not self._full_browsers_explicit:
self._full_browsers_dir = resolve_full_browsers_dir(
self._profile_on_data_disk)
try:
# profile 目录自己建好并收紧到 0700:不依赖
# chv-data-mount 的时序(它在 cloud-final 才跑,
# 可能晚于浏览器首次启动),登录态目录绝不留 0755。
os.makedirs(self._profile_dir, exist_ok=True)
os.chmod(self._profile_dir, 0o700)
except OSError:
pass # 只读/无权限时由 Playwright 启动报错,status 明说
try:
if self._pw is None:
self._pw = self._factory()