我希望将脚本复制到远程服务器,然后执行它。我可以将它复制到目录/home/user/scripts,但是当我运行ansible脚本时,它会返回Could not find or access '/home/user/scripts/servicios.sh'
完整的错误输出是:
fatal: [192.168.1.142]: FAILED! => {"changed": false, "msg": "Could not find or access '/home/user/scripts/servicios.sh'"}这是一本易懂的剧本
- 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 发布于 2019-09-05 23:22:09
您不需要创建目录并将脚本复制到目标(远程节点),脚本模块将为您完成此操作。它采用脚本名,后面是以空格分隔的参数列表。路径上的本地脚本将被传输到远程节点,然后执行。脚本将通过远程节点上的shell环境进行处理。您得到了错误,因为脚本模块期望您的Ansible控制器(运行剧本的节点)上的路径/home/user/scripts/servicios.sh。要使其工作,可以在脚本任务中指定正确的路径(/home/local/servicios.sh),而不是/home/user/scripts/servicios.sh (远程节点上的路径)。所以你可以像这样修改剧本:如果你想看的话,你也可以把这个命令的结果注册为一个变量。
---
- 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 }}" 如果您不想使用脚本模块,而您感兴趣的是创建一个目录并显式地将脚本复制到目标(远程节点),并运行它呢?不用担心,您仍然可以像这样使用命令模块:
---
- 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模块。
发布于 2019-09-05 19:13:43
脚本标记本身将脚本从本地机器传输到远程计算机,并在那里执行。
因此,脚本模块中指定的路径是本地机器,而不是远程机器,即/home/local/servicios.sh而不是/home/user/scripts/servicios.sh。
由于您已经指定了远程计算机上的路径,ansible无法在给定路径的本地机器上找到该脚本,从而导致给定的错误。
因此,将任务中的路径更新为本地路径,如下所示,
- name: ejecutar script como sudo
become: yes
script: /home/local/servicios.sh因此,脚本不能在远程服务器内执行,而应该通过本地机器执行到远程?
@trash3d不,不是这样的。当您使用script标记时,脚本被传输到远程机器,然后在那里执行。如果有一个脚本您不想放在远程机器上,只想执行它,那么您可以使用script标记。
如果您希望远程计算机上的脚本,那么您可以首先在远程机器上复制脚本,然后在那里执行它。
这两种方法都是正确的,由你决定哪一种情况更适合你。
https://stackoverflow.com/questions/57810779
复制相似问题