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

Azure DevOps自托管代理任务子进程随作业终止问题求助

解决Azure DevOps自定义PowerShell任务中子进程持续运行并随作业终止的问题

问题背景

在自托管Azure DevOps代理上,使用传统PowerShell执行器运行自定义任务时,通过Start-Process启动子进程运行轮询脚本,但主任务进程退出时子进程会随之终止,无法在作业生命周期内持续运行;同时需要确保作业结束时子进程能被自动终止。

解决方案

方案1:使用PowerShell后台作业(推荐)

利用PowerShell的Start-Job创建后台作业,它会在独立进程中运行,且可通过任务清理脚本在作业结束时终止。

主任务脚本修改:

$PollScriptPath = [System.IO.Path]::Combine($PSScriptRoot, "poll.ps1")
# 创建后台作业并将输出定向到日志文件
$pollJob = Start-Job -ScriptBlock {
    & $using:PollScriptPath *>> PollLog.txt
}

# 将作业ID写入文件,供清理脚本使用
$pollJob.Id | Out-File -FilePath "PollJobId.txt" -Force

任务清单配置:

在任务的execution.PowerShell节点中添加清理脚本路径:

{
  "execution": {
    "PowerShell": {
      "scriptPath": "你的主脚本路径",
      "cleanupScript": "cleanup.ps1"
    }
  }
}

清理脚本(cleanup.ps1):

$jobId = Get-Content -FilePath "PollJobId.txt" -ErrorAction SilentlyContinue
if ($jobId) {
    # 终止并移除后台作业
    Stop-Job -Id $jobId -ErrorAction SilentlyContinue
    Remove-Job -Id $jobId -ErrorAction SilentlyContinue
}
# 清理临时文件
Remove-Item -FilePath "PollJobId.txt" -ErrorAction SilentlyContinue

方案2:直接管控子进程ID

若必须使用Start-Process,可记录子进程ID,通过清理脚本在作业结束时终止进程。

主任务脚本修改:

$PollScriptPath = [System.IO.Path]::Combine($PSScriptRoot, "poll.ps1")
# 启动子进程并获取进程对象
$process = Start-Process -FilePath "powershell.exe" `
    -ArgumentList "-File `"$PollScriptPath`" *>> PollLog.txt" `
    -PassThru -NoNewWindow

# 将进程ID写入文件
$process.Id | Out-File -FilePath "PollProcessId.txt" -Force

清理脚本:

$processId = Get-Content -FilePath "PollProcessId.txt" -ErrorAction SilentlyContinue
if ($processId) {
    try {
        # 终止目标进程
        $proc = Get-Process -Id $processId -ErrorAction Stop
        $proc.Kill()
    } catch {
        # 进程已自行退出,忽略异常
    }
}
# 清理临时文件
Remove-Item -FilePath "PollProcessId.txt" -ErrorAction SilentlyContinue

关键注意事项

  • 自托管代理环境下,任务工作目录由Azure DevOps管理,清理脚本会在任务结束(成功/失败/取消)时自动执行,确保子进程被清理。
  • 避免通过cmd.exe中转启动PowerShell,减少进程层级以简化管控。
  • 不要依赖主脚本休眠维持子进程,后台作业/进程ID记录+清理脚本的方式更可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:32:48