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

无法使用ansible shell模块执行脚本,ansible,Ansible,我试图运行一个ansible脚本来使用shell模块执行脚本,它以“成功”的状态完成ansible剧本,但由于某种原因该脚本尚未执行 剧本: - 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

我试图运行一个ansible脚本来使用shell模块执行脚本,它以“成功”的状态完成ansible剧本,但由于某种原因该脚本尚未执行

剧本:

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

看起来你的脚本正在运行。然而,也许它没有成功运行

帮助调试它的三个建议:

  • 调用ansible时更详细(更多
    -v
    s)
  • 将stderr重定向到日志文件中(
    /start.sh>/tmp/log.txt 2>&1
  • set-x
    添加到脚本中,以便它打印出它运行的每个命令
  • 您还可能发现
    set-euo pipefail
    在创建行为良好的shell脚本时非常有用,该脚本在其命令中遇到错误时会正确退出失败代码


    除此之外,您应该使用
    命令复制文件;改用:


    使用
    -vvv
    执行playbook,查看
    start.sh发生了什么。谢谢,请查看下面的新输出(对Xiong的评论)谢谢,我接受了您的建议,并执行了第1和第2步。但我认为额外的产出没有多大帮助。请参见以下内容:changed:[ftp2]=>{“changed”:true,“cmd”:“/start.sh>/tmp/log.txt 2>&1”,“delta”:“0:00:00.002725”,“end”:“2016-09-21 15:59:12.554926”,“调用”:{“模块参数”:{“原始参数”:“/start.sh>/tmp/log.txt 2>&1”,“使用shell”:true,“chdir”/“电子邮件服务/”,“创建”:null,“可执行文件”:null,“删除”:null,“警告”:true},“模块名称”:“命令”},“rc”:0,“开始”:“2016-09-21 15:59:12.552201”,“stderr”:“标准输出”:“标准输出线”:[],“警告”:[]}成功日志文件未获得任何新条目。但是,当我在剧本中引入故意错误时,它现在确实转到日志文件。此外,我无法理解如何在命令中引入set-x和set-euo pipefail。你能告诉我应该在哪里添加它吗?把它们放在脚本的顶部,就在hashbang下面,作为你执行的第一个命令。
    
    TASK [Start email service] *****************************************************
    changed: [ftp2]
    
      - name: Copy a dummy file to /tmp folder
        copy:
          src: /apps/tomcat-web/LICENSE
          dest: /tmp/LICENSE-{{ ansible_date_time.iso8601 }}
          remote_src: yes