首页 文章

无法使用ansible shell模块执行脚本

提问于
浏览
0

我正在尝试运行一个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 回答

  • 0

    任务[开始发送电子邮件服务] ******************************************* **********
    改变了:[ftp2]

    它看起来好像你的脚本正在运行 . 但是,也许它没有成功运行?

    帮助调试它的三个建议:

    • 以更详细的方式调用ansible(更多 -v s) .

    • 将stderr重定向到您的日志文件中( ./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
    

相关问题