You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在Ansible中使用通配符设置文件权限报错,该如何解决?

解决Ansible设置Tomcat bin目录下.sh文件权限的问题

嘿,我来帮你搞定这个权限设置的问题!首先得搞清楚你为啥会遇到这个错误:Ansible的file模块**不支持直接用通配符(比如*.sh)**匹配多个文件。它会把*.sh当成一个具体的文件名去查找,而不是自动匹配所有后缀为.sh的文件,所以才会提示文件不存在。

下面给你几个靠谱的解决方案,按推荐程度排序:

方案1:用find模块+循环(最推荐,符合Ansible幂等性)

先通过find模块找到目标目录下所有的.sh文件,再循环给每个文件设置权限。这样既能准确匹配文件,又能保证重复执行时只有需要修改的文件才会被变更:

- hosts: all
  tasks:
    - name: 查找tomcat/bin下所有.sh文件
      ansible.builtin.find:
        paths: /tomcat/apache-tomcat-8.5.23/bin
        patterns: "*.sh"
      register: sh_files_result

    - name: 为找到的.sh文件设置权限
      ansible.builtin.file:
        path: "{{ item.path }}"
        owner: tomcat
        group: tomcat
        mode: '0755'  # 这里用字符串格式更稳妥,避免数字解析问题
      loop: "{{ sh_files_result.files }}"

方案2:用shell模块(不推荐,仅作备选)

如果你只是临时解决问题,也可以用shell模块直接执行系统命令,但这个方法的缺点是不满足幂等性——每次执行都会标记为"changed",不管权限已经是正确的状态:

- hosts: all
  tasks:
    - name: 通过shell命令设置权限
      ansible.builtin.shell: |
        chown tomcat:tomcat /tomcat/apache-tomcat-8.5.23/bin/*.sh
        chmod 755 /tomcat/apache-tomcat-8.5.23/bin/*.sh

额外检查事项

除了调整Playbook,你可以先确认以下几点:

  • 目标主机上的/tomcat/apache-tomcat-8.5.23/bin/目录确实存在,路径拼写没有错误
  • tomcat用户和组在目标主机上已经正确创建,且没有拼写错误

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

火山引擎 最新活动