我打算使用Ansible剧本在远程服务器上执行Shell脚本。

空白的test.sh文件:

touch test.sh

剧本:
---
- name: Transfer and execute a script.
  hosts: server
  user: test_user
  sudo: yes
  tasks:
     - name: Transfer the script
       copy: src=test.sh dest=/home/test_user mode=0777

     - name: Execute the script
       local_action: command sudo sh /home/test_user/test.sh

当我运行剧本时,传输成功发生,但脚本未执行。

最佳答案

local_action在本地服务器上而不是在hosts参数中指定的服务器上运行命令。

将您的“执行脚本”任务更改为

- name: Execute the script
  command: sh /home/test_user/test.sh

它应该这样做。

您不需要在命令行中重复sudo,因为您已经在剧本中定义了它。

根据Ansible Intro to Playbooks,在Ansible 1.4中user参数已重命名为remote_user,因此您也应该对其进行更改
remote_user: test_user

因此,剧本将变为:
---
- name: Transfer and execute a script.
  hosts: server
  remote_user: test_user
  sudo: yes
  tasks:
     - name: Transfer the script
       copy: src=test.sh dest=/home/test_user mode=0777

     - name: Execute the script
       command: sh /home/test_user/test.sh

10-01 13:23
查看更多