我计划使用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时,传输成功,但脚本未执行。
答案 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