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

Ansible playbook运行shell脚本失败及主机清单INI格式失效问题咨询

问题1:install.sh执行时报同目录脚本不存在的根本原因

Ansible command 模块执行命令时,默认工作目录为远程节点SSH登录用户的家目录,而非install.sh脚本本身的存放目录。你脚本内引用其他脚本时如果用的是相对路径,相对的是命令执行时的工作目录,不是脚本所在目录,自然找不到同目录下的其他文件。你填绝对路径的方案是可行的,也可以在执行脚本的任务中添加chdir参数切换工作目录,写法参考:

- name: Execute the script
  become: true
  command: sh install.sh
  args:
    chdir: /home/lc/lc/

另外你的playbook还有几处可以优化的地方,避免后续出问题:

  • 安装unzip不要用command直接执行apt命令,用官方apt模块支持幂等,重复执行不会报错:
    - name: Install unzip
      become: true
      apt:
        name: unzip
        update_cache: yes
    
  • unarchive模块默认会先在Ansible控制节点找src指定的文件,你现在是读取远程节点已传好的压缩包,需要加remote_src: yes参数,否则控制节点同路径下没有该文件时会执行失败:
    - name: unzip file
      become: true
      unarchive:
        src: /home/lc/lc.zip
        dest: /home/lc/
        remote_src: yes
    
  • 最后启用服务的第二个任务写错了服务名,还是填的service1.service,另外建议用systemd模块替代command执行systemctl命令,更规范:
    - name: Enable services
      become: true
      systemd:
        name: "{{ item }}"
        enabled: yes
      loop:
        - service1.service
        - service2.service
    

问题2:INI格式主机范围不生效的原因

Ansible对INI和YAML两种格式的清单范围语法都原生支持,INI格式不生效的核心原因是旧版本Ansible的INI清单解析器对补零格式的数字范围(也就是[01:50]这种带前导零的写法)兼容不好,而YAML格式的清单解析器对这类补零范围的适配更完善,所以换成YAML格式就能正常识别。
如果要排查INI格式的问题,可以执行ansible-inventory -i 你的清单文件路径 --list命令,查看解析后的主机列表是否符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:45:05