在 Ubuntu 24 上,Azure DevOps 自托管 Agent(self-hosted agent) 查看状态分几种方式,取决于它是以服务运行还是前台脚本运行。下面按场景给全。
1. 以 systemd 服务运行(最常用)
Agent 安装时会用 svc.sh 注册成 systemd 服务,服务名格式通常为:
vsts.agent.<组织名>.<池名>.<Agent名>新版安装包也可能命名为
azure-pipelines-agent。可用通配符查看所有相关服务:
sudo systemctl status 'vsts.agent.*'只看单个服务,并实时观察输出:
sudo systemctl status vsts.agent.MyOrg.MyPool.myagent
journalctl -u vsts.agent.MyOrg.MyPool.myagent -f # 实时看日志2. 用 Agent 自带的 svc.sh(无需记服务名)
进入 agent 根目录(安装时通常是 ~/myagent 或 ~/agent):
cd ~/myagent
./svc.sh status支持的操作:
./svc.sh start # 启动
./svc.sh stop # 停止
./svc.sh uninstall # 卸载服务输出会明确显示 running / stopped。
3. 查看进程与诊断日志(排查异常时)
ps aux | grep -i 'agent' # 确认 Agent 进程是否存活Agent 根目录下有 _diag 文件夹,日志按日期存放:
ls -lt ~/myagent/_diag/ | head # 看最新日志文件
tail -f ~/myagent/_diag/Worker_*.logAgent_*.log:Agent 主进程日志Worker_*.log:运行流水线任务时的日志
4. 在 Azure DevOps 网页端确认
这是最权威的"是否在线"依据:
Organization Settings → Agent pools → 选择 Agent Pool → Agents 标签页,查看该 Agent 的状态(Online / Offline)、最后活跃时间(Last Activity)。
若网页端显示 Offline 但本机 systemd 显示 running,多半是网络/凭据问题,或 Agent 启动后未成功注册到服务端,重点看
_diag日志。
快速判断:先跑这三条
cd ~/myagent && ./svc.sh status # 服务状态
ps aux | grep -i agent # 进程是否在
tail -f ~/myagent/_diag/Agent_*.log # 有无报错如果你的 Agent 是前台方式(./run.sh 直接跑、没装服务),那没有 systemd 服务,直接看终端输出或用 ps 判断即可。
需要的话,把你 ./svc.sh status 或日志的报错贴出来,我帮你具体定位。
建议排查
定位真正失败点:看任务日志里第一次报
Error的那一行,而不是只看Failed结果。plaintextls -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确认失败原因到底是构建命令、依赖还是产物归档,针对性修复后再跑一次。
PowerShell IPC 报错若无碍构建,可暂不处理;若频繁刷屏可关注 PowerShell 更新或重启 agent 服务。
重启 Azure DevOps 自托管 agent,推荐用 svc.sh,它不依赖你记服务名,最省事。前提是先进入 agent 根目录(就是含 _diag、run.sh、svc.sh 的那个目录,通常是 ~/agent 或 ~/myagent)。
标准重启(推荐)
cd ~/agent # 换成你的 agent 根目录
./svc.sh stop # 停止
./svc.sh start # 启动如果想完整干净地重启(先卸服务再重装,适合排障):
cd ~/agent
./svc.sh uninstall # 卸载服务(不会删代码,只是去掉 systemd 单元)
./svc.sh install # 重新注册服务
./svc.sh start # 启动用 systemd 重启(不用进目录)
如果你的 agent 是服务方式运行的,直接:
sudo systemctl restart 'vsts.agent.*'通配符能命中你机器的所有 agent 服务。若想精确指定,先查服务名:
plaintextsystemctl list-units --type=service | grep -i vsts sudo systemctl restart <服务名>
如果前面 find 没找到 _diag
说明 agent 可能是前台方式跑的(./run.sh 直接挂在终端),那就:
- 用
ps aux | grep -i agent找到进程 PID; kill <PID>终止;- 回到当初启动它的终端,重新执行
./run.sh。
重启后验证
./svc.sh status # 应显示 running然后在 Azure DevOps 网页端(Organization → Agent pools → 你的池 → Agents)确认该 agent 变为 Online。
