Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

[Bug] 启动器目标进程搜索超时固定 30 秒且不可配置,更新耗时较长时被误杀

オープン
#73 コメント 4 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
3/5
見積もり時間
1〜2日
初心者へのやさしさ
76/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
python
領域
tooling

調査の方向性

src/script_chainer/win_exe/script_runner.py から始めます。ここでは open_process が固定の search_timeout=30 を受け取ります。次に src/script_chainer/services/process_manager.py を読んで、対象プロセスが見つからない場合にクリーンアップがどのようにトリガーされるかを理解します。外部スクリプトの設定とエディターのパスをたどり、ランチャー専用の設定を追加します。スクリプトごとにタイムアウトを設定でき、run と no-log のタイムアウトとは別のままであり、既存のランチャーの動作がテストでカバーされていれば完了です。

索引モデルが issue の本文から書いたものです。

説明

问题描述

在“启动器启动”模式下,千机链寻找“启动后实际运行的程序”的超时时间固定为 30 秒,且配置界面/YAML 没有对应可调整项。

当启动器在拉起目标进程前需要先更新代码、检查依赖,或开机后网络较慢时,即使启动器仍在正常运行并持续输出日志,只要目标进程没有在 30 秒内出现,千机链就会判定启动失败、终止启动器并跳过当前脚本。

本例中受影响的是绝区零一条龙普通启动器。相同配置在更新完成后手动运行可以正常启动。

环境

  • Windows
  • OneDragon ScriptChainer v1.4.0
  • 通过 Windows 任务计划程序运行 OneDragon ScriptChainer Runner.exe --chain 01
  • 绝区零一条龙启动器 v2.4.7

脱敏后的脚本配置

script_type: external
script_path: <ZZZ_OD_DIR>\OneDragon-Launcher.exe
script_process_name:
  - python.exe
  - pythonw.exe
game_process_name: ZenlessZoneZero.exe
launcher_mode: true
run_timeout_seconds: 3600
check_done: game_or_script_closed
script_arguments: -o -c
no_log_timeout_seconds: 60
enabled: true

其中“启动后实际运行的程序”使用千机链自带的“一条龙”预设。

复现步骤

  1. 开启绝区零一条龙启动器的代码自动更新。
  2. 在千机链中按上述配置使用“启动器启动”模式。
  3. 让启动器的代码拉取/依赖检查阶段持续超过 30 秒,使 python.exe / pythonw.exe 尚未出现。
  4. 运行脚本链。

实际结果

启动器仍在正常拉取代码并输出进度,但约 30 秒时被千机链判定失败并终止。以下时间改为相对时间并已脱敏:

[T+00s] [脚本] OneDragon 启动器 v2.4.7
[T+01s] [脚本] 拉取远程代码
[T+03s] [脚本] 远程消息: 枚举对象完成
...
[T+28s] [脚本] 拉取对象约 73%
[T+30s] 脚本进程启动失败 <ZZZ_OD_DIR>\OneDragon-Launcher.exe
[T+50s] 如长时间未检测到进程,请检查“启动后实际运行的程序”填写是否正确:python.exe / pythonw.exe
[T+50s] 子进程创建失败 <ZZZ_OD_DIR>\OneDragon-Launcher.exe

该问题在多次定时运行中都稳定发生于启动约 30 秒处;同一配置在代码拉取很快完成、目标进程能在 30 秒内出现时可以启动成功,说明进程名称配置没有填错。

Image

日志

script_chainer_runner.log

预期结果

  • “启动后实际运行的程序”的搜索等待时间可以在每个外部脚本中配置;或
  • 只要启动器仍在运行且持续输出日志,就不应在固定 30 秒时直接终止;或
  • 至少将等待时间与已有的“运行超时/无日志超时”明确区分并在界面中显示。

源码定位

src/script_chainer/win_exe/script_runner.py 中固定传入 30 秒:

success = pm.open_process(
    program=script_path,
    args=args_list,
    target_process=target_process_infos,
    search_timeout=30,
    stdout_callback=_make_stdout_callback(display_name, log_notifier, state),
)

src/script_chainer/services/process_manager.py 中,目标进程未找到后会调用 self.kill() 回收启动器:

if target_process is not None:
    found = self.search_process(target_process, search_timeout)
    if not found:
        self.kill()
    return found

建议方案

建议新增每脚本配置项,例如:

startup_timeout_seconds: 120
  • 默认值可以继续保持 30 秒,以兼容现有行为。
  • 在外部程序编辑界面中,仅“启动器启动”模式显示该项。
  • 将其传给 ProcessManager.open_process(search_timeout=...)。
  • “运行超时”和“无日志超时”目前都无法影响目标进程出现前的这 30 秒,因此不能作为现有替代方案。

临时关闭绝区零一条龙的自动更新可以规避,但会失去启动时自动更新能力,不适合作为通用解决办法。

主要言語
Python
スター
217
フォーク
14
PR マージ指標
30日以内にマージされた PR はありません

環境構築

このプロジェクトの環境構築ファイルはまだ確認していません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

OneDragon-Anything/OneDragon-ScriptChainer のほかの issue

OneDragon-Anything/OneDragon-ScriptChainer の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。