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

Ansible执行aptitude查询可升级包时返回non-zero return code错误

问题原因

aptitude 从 0.8.x 版本开始调整了 search 子命令的返回值逻辑:
旧版本(如 0.7.4)只要命令本身执行无错误,无论是否匹配到搜索结果都会返回 0;
0.8.10 及更新版本中,如果 search 命令没有匹配到任何结果(对应当前系统没有可升级的软件包),就会返回 1。Ansible 的 shell 模块默认将非 0 返回码判定为执行失败,因此触发了报错,报错返回的 stdout 为空也对应了无匹配结果的场景。

解决方法

以下三种方案均可解决该兼容问题:

  • 方案1:调整 shell 模块的返回码判定规则,明确指定 0 和 1 均为合法的成功返回码,修改后任务代码如下:
- name: List packages to upgrade (1/2)
  shell: aptitude -q -F%p --disable-columns search "~U"
  register: updates
  changed_when: False
  when: ansible_os_family == 'Debian'
  args:
    rc: [0, 1]
  • 方案2:改用系统默认预装的 apt 命令实现相同需求,不需要依赖 aptitude,适配所有 Debian 系版本,返回值逻辑更稳定:
- name: List packages to upgrade (1/2)
  shell: apt list --upgradable 2>/dev/null | awk 'NR>1 {print $1}' | cut -d'/' -f1
  register: updates
  changed_when: False
  when: ansible_os_family == 'Debian'
  • 方案3:保持原有 aptitude 命令不变,在命令末尾主动修正返回值:
shell: aptitude -q -F%p --disable-columns search "~U" || exit 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 22:24:04