首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ansible,复制脚本,然后在远程机器上执行

Ansible,复制脚本,然后在远程机器上执行
EN

Stack Overflow用户
提问于 2019-09-05 17:54:42
回答 2查看 7.5K关注 0票数 3

我希望将脚本复制到远程服务器,然后执行它。我可以将它复制到目录/home/user/scripts,但是当我运行ansible脚本时,它会返回Could not find or access '/home/user/scripts/servicios.sh'

完整的错误输出是:

代码语言:javascript
运行
复制
fatal: [192.168.1.142]: FAILED! => {"changed": false, "msg": "Could not find or access '/home/user/scripts/servicios.sh'"}

这是一本易懂的剧本

代码语言:javascript
运行
复制
- name: correr script
 hosts: all
 tasks:
         - name: crear carpeta de scripts
           file:
                   path: /home/user/scripts
                   state: directory

         - name: copiar el script
           copy:
                   src: /home/local/servicios.sh
                   dest: /home/user/scripts/servicios.sh

         - name: ejecutar script como sudo
           become: yes
           script: /home/user/scripts/servicios.sh 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-05 23:22:09

您不需要创建目录并将脚本复制到目标(远程节点),脚本模块将为您完成此操作。它采用脚本名,后面是以空格分隔的参数列表。路径上的本地脚本将被传输到远程节点,然后执行。脚本将通过远程节点上的shell环境进行处理。您得到了错误,因为脚本模块期望您的Ansible控制器(运行剧本的节点)上的路径/home/user/scripts/servicios.sh。要使其工作,可以在脚本任务中指定正确的路径(/home/local/servicios.sh),而不是/home/user/scripts/servicios.sh (远程节点上的路径)。所以你可以像这样修改剧本:如果你想看的话,你也可以把这个命令的结果注册为一个变量。

代码语言:javascript
运行
复制
---
- name: correr script
  hosts: all
  become: yes
  tasks:
    - name: ejecutar script como sudo
      script: /home/local/servicios.sh
      register: console

    - debug: msg="{{ console.stdout }}"

    - debug: msg="{{ console.stderr }}" 

如果您不想使用脚本模块,而您感兴趣的是创建一个目录并显式地将脚本复制到目标(远程节点),并运行它呢?不用担心,您仍然可以像这样使用命令模块:

代码语言:javascript
运行
复制
---
- name: correr script
  hosts: all
  become: yes
  tasks:
    - name: crear carpeta de scripts
      file:
        path: /home/user/scripts
        state: directory

    - name: copiar el script
      copy:
        src: /home/local/servicios.sh
        dest: /home/user/scripts/servicios.sh

    - name: ejecutar script como sudo
      command: bash /home/user/scripts/servicios.sh
      register: console

    - debug: msg="{{ console.stdout }}"

    - debug: msg="{{ console.stderr }}" 

但我强烈建议使用script模块。

票数 4
EN

Stack Overflow用户

发布于 2019-09-05 19:13:43

脚本标记本身将脚本从本地机器传输到远程计算机,并在那里执行。

因此,脚本模块中指定的路径是本地机器,而不是远程机器,即/home/local/servicios.sh而不是/home/user/scripts/servicios.sh

由于您已经指定了远程计算机上的路径,ansible无法在给定路径的本地机器上找到该脚本,从而导致给定的错误。

因此,将任务中的路径更新为本地路径,如下所示,

代码语言:javascript
运行
复制
- name: ejecutar script como sudo
  become: yes
  script: /home/local/servicios.sh

因此,脚本不能在远程服务器内执行,而应该通过本地机器执行到远程?

@trash3d不,不是这样的。当您使用script标记时,脚本被传输到远程机器,然后在那里执行。如果有一个脚本您不想放在远程机器上,只想执行它,那么您可以使用script标记。

如果您希望远程计算机上的脚本,那么您可以首先在远程机器上复制脚本,然后在那里执行它。

这两种方法都是正确的,由你决定哪一种情况更适合你。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57810779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档