Skip to content

在 Ubuntu 24 上,Azure DevOps 自托管 Agent(self-hosted agent) 查看状态分几种方式,取决于它是以服务运行还是前台脚本运行。下面按场景给全。

1. 以 systemd 服务运行(最常用) ​

Agent 安装时会用 svc.sh 注册成 systemd 服务,服务名格式通常为:

plaintext
vsts.agent.<组织名>.<池名>.<Agent名>

新版安装包也可能命名为 azure-pipelines-agent。可用通配符查看所有相关服务:

plaintext
sudo systemctl status 'vsts.agent.*'

只看单个服务,并实时观察输出:

plaintext
sudo systemctl status vsts.agent.MyOrg.MyPool.myagent
journalctl -u vsts.agent.MyOrg.MyPool.myagent -f   # 实时看日志

2. 用 Agent 自带的 svc.sh(无需记服务名) ​

进入 agent 根目录(安装时通常是 ~/myagent 或 ~/agent):

plaintext
cd ~/myagent
./svc.sh status

支持的操作:

plaintext
./svc.sh start      # 启动
./svc.sh stop       # 停止
./svc.sh uninstall  # 卸载服务

输出会明确显示 running / stopped。

3. 查看进程与诊断日志(排查异常时) ​

plaintext
ps aux | grep -i 'agent'          # 确认 Agent 进程是否存活

Agent 根目录下有 _diag 文件夹,日志按日期存放:

plaintext
ls -lt ~/myagent/_diag/ | head    # 看最新日志文件
tail -f ~/myagent/_diag/Worker_*.log
  • Agent_*.log:Agent 主进程日志
  • Worker_*.log:运行流水线任务时的日志

4. 在 Azure DevOps 网页端确认 ​

这是最权威的"是否在线"依据:

Organization Settings → Agent pools → 选择 Agent Pool → Agents 标签页,查看该 Agent 的状态(Online / Offline)、最后活跃时间(Last Activity)。

若网页端显示 Offline 但本机 systemd 显示 running,多半是网络/凭据问题,或 Agent 启动后未成功注册到服务端,重点看 _diag 日志。


快速判断:先跑这三条 ​

plaintext
cd ~/myagent && ./svc.sh status     # 服务状态
ps aux | grep -i agent              # 进程是否在
tail -f ~/myagent/_diag/Agent_*.log # 有无报错

如果你的 Agent 是前台方式(./run.sh 直接跑、没装服务),那没有 systemd 服务,直接看终端输出或用 ps 判断即可。

需要的话,把你 ./svc.sh status 或日志的报错贴出来,我帮你具体定位。

建议排查 ​

  1. 定位真正失败点:看任务日志里第一次报 Error 的那一行,而不是只看 Failed 结果。

    plaintext
    ls -lt ~/azagent/_diag/Worker_*.log | head
    grep -i -E 'error|fail' ~/azagent/_diag/Worker_$(ls -t ~/agent/_diag/ | head -1 | grep -oP 'Worker_\K[0-9]+').log
  2. 确认失败原因到底是构建命令、依赖还是产物归档,针对性修复后再跑一次。

  3. PowerShell IPC 报错若无碍构建,可暂不处理;若频繁刷屏可关注 PowerShell 更新或重启 agent 服务。

重启 Azure DevOps 自托管 agent,推荐用 svc.sh,它不依赖你记服务名,最省事。前提是先进入 agent 根目录(就是含 _diag、run.sh、svc.sh 的那个目录,通常是 ~/agent 或 ~/myagent)。

标准重启(推荐) ​

plaintext
cd ~/agent                  # 换成你的 agent 根目录
./svc.sh stop               # 停止
./svc.sh start              # 启动

如果想完整干净地重启(先卸服务再重装,适合排障):

plaintext
cd ~/agent
./svc.sh uninstall          # 卸载服务(不会删代码,只是去掉 systemd 单元)
./svc.sh install            # 重新注册服务
./svc.sh start              # 启动

用 systemd 重启(不用进目录) ​

如果你的 agent 是服务方式运行的,直接:

plaintext
sudo systemctl restart 'vsts.agent.*'

通配符能命中你机器的所有 agent 服务。若想精确指定,先查服务名:

plaintext
systemctl list-units --type=service | grep -i vsts
sudo systemctl restart <服务名>

如果前面 find 没找到 _diag ​

说明 agent 可能是前台方式跑的(./run.sh 直接挂在终端),那就:

  1. 用 ps aux | grep -i agent 找到进程 PID;
  2. kill <PID> 终止;
  3. 回到当初启动它的终端,重新执行 ./run.sh。

重启后验证 ​

plaintext
./svc.sh status                  # 应显示 running

然后在 Azure DevOps 网页端(Organization → Agent pools → 你的池 → Agents)确认该 agent 变为 Online。