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

时间:2016-09-21 17:45:21

标签: ansible

我正在尝试运行一个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 :(得分:0)

TASK [Start email service] *****************************************************
changed: [ftp2]

看起来您的脚本正在运行。但是,它可能没有成功运行

帮助调试它的三个建议:

  1. 以更详细的方式调用ansible(更多-v s)。
  2. 将stderr重定向到您的日志文件(./start.sh >> /tmp/log.txt 2>&1
  3. set -x添加到您的脚本中,以便打印出它运行的每个命令。
  4. 您可能还会发现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