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

使用Ansible修改CPU Scaling Governor后重启检查结果异常求助

问题描述

使用Ansible修改CPU Scaling Governor并重启主机后,执行以下Playbook检查设置是否生效:

tasks:
  - name: check scaling governor after reboot
    vars:
      scale_gov: "{{ lookup('file', '/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor') }}"
      governor: schedutil
    ansible.builtin.debug:
      var: scale_gov
    when: governor != scale_gov

执行结果始终显示:

TASK [check scaling governor after reboot] *******************
ok: [host] => {
    "scale_gov": "powersave"
}

但通过SSH登录主机执行cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor,输出的是之前设置的正确Governor值。疑问:操作有误还是file lookup插件存在bug?

问题原因及解决办法
  • 核心问题:lookup('file')是在**控制节点(运行Ansible的本地机器)**上执行的,不是在目标主机上!你读取的是控制节点本地的/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor文件内容,自然和目标主机实际值不符,这不是插件bug,是对Ansible执行逻辑的误解。
  • 正确做法:要读取目标主机上的文件,需使用在目标节点执行的模块,以下两种方案可选:

方案1:用command模块读取

tasks:
  - name: get current scaling governor
    ansible.builtin.command: cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
    register: scale_gov_result
    changed_when: false

  - name: alert if governor mismatch
    ansible.builtin.debug:
      msg: "当前Governor为{{ scale_gov_result.stdout }},预期为schedutil"
    when: scale_gov_result.stdout != 'schedutil'

方案2:用slurp模块读取

适合读取二进制文件或需要保留原始格式的场景,读取文本文件也适用:

tasks:
  - name: get current scaling governor
    ansible.builtin.slurp:
      src: /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
    register: scale_gov_slurp

  - name: alert if governor mismatch
    ansible.builtin.debug:
      msg: "当前Governor为{{ scale_gov_slurp.content | b64decode | trim }},预期为schedutil"
    when: (scale_gov_slurp.content | b64decode | trim) != 'schedutil'

补充:Ansible的lookup系列插件均在控制节点执行,只有各类模块(如command、slurp、copy等)才会在目标主机上完成操作,这是Ansible的基础执行逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 18:52:40