Ansible批量执行权限修改脚本无变更,单主机执行正常求助
问题排查与修复方案
你的脚本在单主机正常、网段批量执行时权限未变更,主要是因为依赖command+find的方式存在冗余且状态判断不够可靠,以下是具体问题分析和修复后的脚本:
核心问题点
- 冗余的命令逻辑:已经通过Ansible原生
find模块拿到了目标目录,却再次用find命令去定位同一个目录,完全没必要,还可能因不同主机的find参数行为差异导致意外问题。 - 变更状态判断不可靠:依赖
chmod -c的输出来判断是否变更,若目录权限原本就是750,任务会显示ok但无实际操作;如果是有权限修改需求却未执行,这个逻辑也会掩盖潜在错误。
修复后的脚本
替换command模块为Ansible原生file模块,它会自动检测权限并处理变更,兼容性和可靠性更强:
--- - name: "设置所有/home子目录权限为750" hosts: 172.16.11.* become: yes tasks: - name: 查找/home下的直接子目录 find: paths: /home recurse: no file_type: directory register: found_directories - debug: msg: "找到的目录: {{ found_directories.files | map(attribute='path') | list }}" - name: 将/home子目录权限设置为750 file: path: "{{ item.path }}" mode: '0750' state: directory with_items: "{{ found_directories.files }}"
额外排查建议
- 执行脚本时添加
-v或-vvv参数,查看详细输出,确认found_directories是否正确获取到目标目录,以及file模块的执行细节。 - 确认网段内所有主机的
/home下确实存在需要修改权限的子目录(避免debug输出为空)。 - 若部分主机sudo需要密码,执行时添加
--ask-become-pass参数,确保become: yes能正常获取root权限。
内容的提问来源于stack exchange,提问作者DK Germany
相关产品推荐
相关产品推荐

