我正在尝试运行一个ansible脚本来使用shell模块执行脚本,并且它完成了一个状态为' SUCCESS'的ansible playbook,但是由于某种原因脚本没有被执行。
剧本:
- hosts: '{{ hosts }}'
tasks:
- name: Copy a dummy file to /tmp folder
command: "cp /apps/tomcat-web/LICENSE /tmp/LICENSE-{{ ansible_date_time.iso8601 }}"
- name: Start email service
shell: ./start.sh >> /tmp/log.txt
args:
chdir: /email-service/
控制台输出:
+ ansible-playbook deploy/test-ansible.yml --extra-vars hosts=mut
PLAY [mut] ****************************************************************
TASK [setup] *******************************************************************
ok: [ftp2]
TASK [Copy a dummy file to /tmp folder] ****************************************
changed: [ftp2]
TASK [Start email service] *****************************************************
changed: [ftp2]
PLAY RECAP *********************************************************************
ftp2 : ok=3 changed=2 unreachable=0 failed=0
Finished: SUCCESS
正在正确完成剧本中的第一步(创建许可文件)。但是第二步(执行start.sh)没有完成。谁能解释一下?非常感谢。
注意:脚本的完整路径是/email-service/start.sh 谢谢!
答案 0 :(得分:0)
TASK [Start email service] ***************************************************** changed: [ftp2]
看起来您的脚本正在运行。但是,它可能没有成功运行?
帮助调试它的三个建议:
-v
s)。./start.sh >> /tmp/log.txt 2>&1
)set -x
添加到您的脚本中,以便打印出它运行的每个命令。您可能还会发现set -euo pipefail
在创建一个行为良好的shell脚本时非常有用,该脚本在遇到命令错误时会以失败代码正确退出。
除此之外,您应该使用command
来复制文件;改为使用the copy
module:
- name: Copy a dummy file to /tmp folder
copy:
src: /apps/tomcat-web/LICENSE
dest: /tmp/LICENSE-{{ ansible_date_time.iso8601 }}
remote_src: yes