You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Jenkins通过Windows批处理启动Teraterm无法生成日志文件

问题解决:Jenkins中启动Teraterm无法生成日志文件

问题场景

在Jenkins作业中执行Windows批处理,后台启动Teraterm监听UART并生成日志,手动在命令行执行批处理时日志正常生成,但Jenkins中Teraterm启动后无日志文件。批处理代码如下:

cd /D "C:\Program Files (x86)\teraterm"
start TTERMPRO /C=3 /SPEED=921600 /L="Path\logs\uart.log"
Other commands to generate uart com

已尝试的无效操作:

  • 用start TTERMPRO ... > "Path\logs\uart.log"重定向输出,文件为空
  • 直接在Jenkins中执行命令、用call替代start,结果一致
  • 不使用start会导致作业阻塞

可能的原因及解决方法

1. Jenkins运行账户权限不足

Jenkins默认以Local System账户或专用服务账户运行,该账户可能没有日志目录的读写权限。

  • 操作步骤:
    1. 打开Windows服务管理器,找到Jenkins服务,查看其「登录身份」
    2. 找到日志目录(如Path\logs),右键选择「属性」-「安全」
    3. 添加Jenkins运行账户,授予读取、写入、修改权限
    4. 重启Jenkins服务后重试

2. 相对路径解析错误

批处理中的相对路径Path\logs\uart.log在Jenkins环境下的工作目录与手动执行时不同,导致Teraterm找不到正确的日志路径。

  • 解决方法:使用绝对路径,优先利用Jenkins内置变量%WORKSPACE%(指向当前作业的工作空间):
    cd /D "C:\Program Files (x86)\teraterm"
    rem 先确保日志目录存在
    if not exist "%WORKSPACE%\logs" mkdir "%WORKSPACE%\logs"
    start TTERMPRO /C=3 /SPEED=921600 /L="%WORKSPACE%\logs\uart.log"
    Other commands to generate uart com
    

3. Jenkins作业结束时强制终止子进程

Jenkins作业执行完成后,可能会强制终止其启动的所有子进程,导致Teraterm还未完成日志文件的初始化就被关闭。

  • 解决方法:
    • 在后续UART命令执行完成后,添加等待时间,给Teraterm足够时间写入日志:
      Other commands to generate uart com
      rem 等待10秒,确保日志写入完成
      timeout /t 10 /nobreak > nul
      
    • 或者循环检查日志文件是否存在,确认Teraterm初始化完成后再执行后续命令:
      cd /D "C:\Program Files (x86)\teraterm"
      if not exist "%WORKSPACE%\logs" mkdir "%WORKSPACE%\logs"
      start TTERMPRO /C=3 /SPEED=921600 /L="%WORKSPACE%\logs\uart.log"
      rem 循环等待日志文件生成,最多等待30秒
      set "log_file=%WORKSPACE%\logs\uart.log"
      set "wait_time=0"
      :wait_loop
      if exist "%log_file%" goto continue
      timeout /t 1 /nobreak > nul
      set /a wait_time+=1
      if %wait_time% lss 30 goto wait_loop
      :continue
      Other commands to generate uart com
      

4. Teraterm路径解析异常

start命令若遇到含空格的路径,可能会将路径前半部分解析为窗口标题,导致Teraterm启动异常。

  • 解决方法:在start后添加空引号,明确指定窗口标题(此处留空),再传入Teraterm的完整路径:
    if not exist "%WORKSPACE%\logs" mkdir "%WORKSPACE%\logs"
    start "" "C:\Program Files (x86)\teraterm\TTERMPRO.exe" /C=3 /SPEED=921600 /L="%WORKSPACE%\logs\uart.log"
    Other commands to generate uart com
    

内容的提问来源于stack exchange,提问作者Solene

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 15:30:23