a
This commit is contained in:
parent
ed5ea8b733
commit
d7813bbc80
|
|
@ -125,7 +125,35 @@ def ini_filename_for_program(program_name: str) -> str:
|
||||||
|
|
||||||
def render_program_ini(account_id: int, program_name: str) -> str:
|
def render_program_ini(account_id: int, program_name: str) -> str:
|
||||||
project_root = _get_project_root()
|
project_root = _get_project_root()
|
||||||
python_bin = sys.executable # 使用 backend 当前虚拟环境,通常已包含 trading_system 依赖
|
# Python 可执行文件:
|
||||||
|
# - 优先使用 TRADING_PYTHON_BIN(线上可显式指定 trading_system 的 venv)
|
||||||
|
# - 否则尝试多种候选路径(避免 backend venv 未安装交易依赖导致启动失败)
|
||||||
|
python_bin_env = (os.getenv("TRADING_PYTHON_BIN") or "").strip()
|
||||||
|
candidates = []
|
||||||
|
if python_bin_env:
|
||||||
|
candidates.append(python_bin_env)
|
||||||
|
# 当前进程 python(backend venv)
|
||||||
|
candidates.append(sys.executable)
|
||||||
|
# 常见 venv 位置
|
||||||
|
candidates += [
|
||||||
|
str(project_root / "backend" / ".venv" / "bin" / "python"),
|
||||||
|
str(project_root / ".venv" / "bin" / "python"),
|
||||||
|
str(project_root / "trading_system" / ".venv" / "bin" / "python"),
|
||||||
|
"/usr/bin/python3",
|
||||||
|
"/usr/local/bin/python3",
|
||||||
|
]
|
||||||
|
python_bin = None
|
||||||
|
for c in candidates:
|
||||||
|
try:
|
||||||
|
p = Path(c)
|
||||||
|
if p.exists() and os.access(str(p), os.X_OK):
|
||||||
|
python_bin = str(p)
|
||||||
|
break
|
||||||
|
except Exception:
|
||||||
|
continue
|
||||||
|
if not python_bin:
|
||||||
|
# 最后兜底:写 sys.executable,让错误能在日志里体现
|
||||||
|
python_bin = sys.executable
|
||||||
|
|
||||||
# 日志目录可通过环境变量覆盖
|
# 日志目录可通过环境变量覆盖
|
||||||
log_dir = Path(os.getenv("TRADING_LOG_DIR", str(project_root / "logs"))).expanduser()
|
log_dir = Path(os.getenv("TRADING_LOG_DIR", str(project_root / "logs"))).expanduser()
|
||||||
|
|
@ -141,6 +169,7 @@ def render_program_ini(account_id: int, program_name: str) -> str:
|
||||||
|
|
||||||
# 默认不自动启动,避免“创建账号=立刻下单”
|
# 默认不自动启动,避免“创建账号=立刻下单”
|
||||||
autostart = (os.getenv("TRADING_AUTOSTART_DEFAULT", "false") or "false").lower() == "true"
|
autostart = (os.getenv("TRADING_AUTOSTART_DEFAULT", "false") or "false").lower() == "true"
|
||||||
|
run_user = (os.getenv("SUPERVISOR_RUN_USER") or "").strip()
|
||||||
|
|
||||||
return "\n".join(
|
return "\n".join(
|
||||||
[
|
[
|
||||||
|
|
@ -152,11 +181,18 @@ def render_program_ini(account_id: int, program_name: str) -> str:
|
||||||
"startsecs=3",
|
"startsecs=3",
|
||||||
"stopasgroup=true",
|
"stopasgroup=true",
|
||||||
"killasgroup=true",
|
"killasgroup=true",
|
||||||
|
"stopsignal=TERM",
|
||||||
"",
|
"",
|
||||||
f'environment=ATS_ACCOUNT_ID="{int(account_id)}",PYTHONUNBUFFERED="1"',
|
# 关键:PYTHONPATH 指向项目根,确保 -m trading_system.main 可导入
|
||||||
|
f'environment=ATS_ACCOUNT_ID="{int(account_id)}",PYTHONUNBUFFERED="1",PYTHONPATH="{project_root}"',
|
||||||
|
(f"user={run_user}" if run_user else "").rstrip(),
|
||||||
"",
|
"",
|
||||||
f"stdout_logfile={out_log}",
|
f"stdout_logfile={out_log}",
|
||||||
f"stderr_logfile={err_log}",
|
f"stderr_logfile={err_log}",
|
||||||
|
"stdout_logfile_maxbytes=20MB",
|
||||||
|
"stdout_logfile_backups=5",
|
||||||
|
"stderr_logfile_maxbytes=20MB",
|
||||||
|
"stderr_logfile_backups=5",
|
||||||
"",
|
"",
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user