修正用户交易状态不正常显示问题

This commit is contained in:
薇薇安 2026-02-03 11:35:54 +08:00
parent 040473d4d3
commit 97ecf8e605

View File

@ -19,7 +19,7 @@ import subprocess
import sys import sys
from dataclasses import dataclass from dataclasses import dataclass
from pathlib import Path from pathlib import Path
from typing import Optional, Tuple from typing import Optional, Tuple, List, Dict, Any
DEFAULT_CANDIDATE_CONFS = [ DEFAULT_CANDIDATE_CONFS = [
@ -29,6 +29,38 @@ DEFAULT_CANDIDATE_CONFS = [
"/etc/supervisord.conf", "/etc/supervisord.conf",
] ]
# 常见 supervisorctl 路径候选
DEFAULT_SUPERVISORCTL_CANDIDATES = [
"/www/server/panel/pyenv/bin/supervisorctl",
"/usr/bin/supervisorctl",
"/usr/local/bin/supervisorctl",
"/usr/local/python/bin/supervisorctl",
]
def _detect_supervisorctl_path() -> str:
"""
探测 supervisorctl 可执行文件路径
"""
env_path = (os.getenv("SUPERVISORCTL_PATH") or "").strip()
if env_path:
return env_path
# 优先检查 PATH 中的 supervisorctl
import shutil
if shutil.which("supervisorctl"):
return "supervisorctl"
# 检查常见绝对路径
for p in DEFAULT_SUPERVISORCTL_CANDIDATES:
try:
if os.path.exists(p) and os.access(p, os.X_OK):
return p
except Exception:
continue
return "supervisorctl" # 兜底
# 常见 supervisord 主日志路径候选(不同发行版/面板插件差异很大) # 常见 supervisord 主日志路径候选(不同发行版/面板插件差异很大)
DEFAULT_SUPERVISORD_LOG_CANDIDATES = [ DEFAULT_SUPERVISORD_LOG_CANDIDATES = [
# aaPanel / 宝塔 supervisor 插件常见 # aaPanel / 宝塔 supervisor 插件常见
@ -226,7 +258,7 @@ def write_program_ini(program_dir: Path, filename: str, content: str) -> Path:
def _build_supervisorctl_cmd(args: list[str]) -> list[str]: def _build_supervisorctl_cmd(args: list[str]) -> list[str]:
supervisorctl_path = os.getenv("SUPERVISORCTL_PATH", "supervisorctl") supervisorctl_path = _detect_supervisorctl_path()
supervisor_conf = (os.getenv("SUPERVISOR_CONF") or "").strip() supervisor_conf = (os.getenv("SUPERVISOR_CONF") or "").strip()
use_sudo = (os.getenv("SUPERVISOR_USE_SUDO", "false") or "false").lower() == "true" use_sudo = (os.getenv("SUPERVISOR_USE_SUDO", "false") or "false").lower() == "true"
@ -250,8 +282,15 @@ def run_supervisorctl(args: list[str], timeout_sec: int = 10) -> str:
res = subprocess.run(cmd, capture_output=True, text=True, timeout=int(timeout_sec)) res = subprocess.run(cmd, capture_output=True, text=True, timeout=int(timeout_sec))
except subprocess.TimeoutExpired: except subprocess.TimeoutExpired:
raise RuntimeError("supervisorctl 超时") raise RuntimeError("supervisorctl 超时")
except FileNotFoundError:
# 明确提示找不到命令,帮助排查路径问题
cmd_str = " ".join(cmd)
raise RuntimeError(f"Command not found: {cmd[0]} (Full cmd: {cmd_str})")
except Exception as e:
raise RuntimeError(f"supervisorctl execution failed: {str(e)}")
out = (res.stdout or "").strip() out = (res.stdout or "").strip()
err = (res.stderr or "").strip() err = (res.stderr or "").strip()
combined = "\n".join([s for s in [out, err] if s]).strip() combined = "\n".join([s for s in [out, err] if s]).strip()
# supervisorctl: status 在存在 STOPPED 等进程时可能返回 exit=3但输出仍然有效 # supervisorctl: status 在存在 STOPPED 等进程时可能返回 exit=3但输出仍然有效