如何使用Ansible在远程服务器上执行shell脚本?

时间:2014-01-16 11:40:45

标签: shell ansible ansible-playbook remote-server

我计划使用Ansible playbook在远程服务器上执行shell脚本。

test.sh:

touch test.txt

剧本:

---
- 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

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

4 个答案:

答案 0 :(得分:72)

您可以使用 script 模块

实施例

- name: Transfer and execute a script.
  hosts: all
  tasks:

     - name: Copy and Execute the script 
       script: /home/user/userScript.sh

答案 1 :(得分:31)

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

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

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

它应该这样做。

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

根据Ansible Intro to Playbooks user参数在Ansible 1.4中重命名为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

答案 2 :(得分:18)

最好使用script模块:
http://docs.ansible.com/script_module.html

答案 3 :(得分:0)

您可以使用模板模块将本地计算机上是否存在脚本复制到远程计算机上并执行。

 - name: Copy script from local to remote machine
   hosts: remote_machine
   tasks:
    - name: Copy  script to remote_machine
      template: src=script.sh.2 dest=<remote_machine path>/script.sh mode=755
    - name: Execute script on remote_machine
      script: sh <remote_machine path>/script.sh