2016-09-21 11 views
0

シェルモジュールを使用してスクリプトを実行するために、実行可能なスクリプトを実行しようとしていますが、ステータスが「SUCCESS」であるが、スクリプトは実行されていません何らかの理由で。シェルモジュールを使用してスクリプトを実行することができません

脚本:

- 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 

プレイブック(ライセンスファイルを作成する)の最初のステップは、適切に行われています。しかし、2番目のステップ(start.shを実行中)は実行されていません。誰でも説明できますか?大変感謝します。

注:スクリプトのフルパスは/email-service/start.shです。 ありがとうございました!

+0

'-vvv'でプレイブックを実行して、' start.sh'で起こっていることを確認してください。 –

+0

ありがとう、下の新しい出力を参照してください(Xiongのコメント) – gunnersfan

答えて

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

それは確かにあなたのスクリプトが実行されているように見えます。しかし、おそらく実行されていません?それデバッグを支援するための

三件の提案:

  1. より饒舌(もっと-v S)とansible起動します。
  2. stderrをログファイルにリダイレクトする(./start.sh >> /tmp/log.txt 2>&1
  3. set -xをスクリプトに追加すると、実行するすべてのコマンドが出力されます。

また、コマンドでエラーが発生したときに正常に終了する正常に動作するシェルスクリプトを作成するのに便利なset -euo pipefailがあります。あなたがファイルをコピーする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 
+0

ありがとう、私はあなたのアドバイスを取った#1と2でした。しかし、私は追加の出力が多くの助けとは思わない。以下を参照してください:変更:[ftp2] => {"変更":true、 "cmd": "./start.sh >> /tmp/log.txt 2>&1"、 "delta": "0:00:00.002725 "、" end ":" 2016-09-21 15:59:12.554926 "、" invocation ":{" module_args ":{" _raw_params ":" ./start.sh >> /tmp/log.txt 2>&1 "、" _use_shell ":true、" chdir ":"/email-service/"、"作成する ":null、" executable ":null、" removed ":null、" warn ":true}、" module_name "コマンド "}、" rc ":0、" start ":" 2016-09-21 15:59:12.552201 "、" stderr ":" "、" stdout ":" "、" stdout_lines ":[]、"警告":[]} SUCCESS – gunnersfan

+0

ログファイルに新しいエントリが見つかりませんでした。しかし、私がプレイブックに意図的なエラーを導入したとき、それは今ログファイルに行きます。また、コマンドにset -xとset -euo pipefailを導入する方法を理解できません。私はそれをどこに追加すべきか教えていただけますか? – gunnersfan

+0

あなたが実行する最初のコマンドとして、スクリプトの最上部、つまりハッシュバングのすぐ下にそれらを置きます。 –

関連する問題