我正在尝试运行一个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谢谢!
1 回答
它看起来好像你的脚本正在运行 . 但是,也许它没有成功运行?
帮助调试它的三个建议:
以更详细的方式调用ansible(更多
-v
s) .将stderr重定向到您的日志文件中(
./start.sh >> /tmp/log.txt 2>&1
)将
set -x
添加到脚本中,以便打印出它运行的每个命令 .您还可以找到
set -euo pipefail
在创建性能良好的shell脚本时非常有用,该脚本在遇到命令错误时会正确退出并显示失败代码 .除此之外,您应该使用
command
来复制文件;改为使用the copy module: