2017-03-09 7 views
0

私のような仕事があるAnsibleの脚本、持っている:bashコマンドを実行するときにnohupと&の違いは何ですか?

- name: start the apache server 
    command: ./server.sh start chdir="/myapp" 

をしてserver.shに:

#!/bin/bash 
server_wrapper.py start 

server_wrapper.py中:

#!/usr/bin/python 
import threading 
import subprocess 
cmd = "$APATCH_HOME/scripts/service.sh restart" 
print cmd 
ret = subprocess.call(cmd, shell=True) 
if ret !=0 
    logging.critical("error happend, %d" % ret) 

これは、ランダムに失敗します。私が手作業でリモートサーバーにsshを実行すると、$APACHE_HOME/scripts/service.sh restartの実行で表示され、Apacheが正常に実行され、コンソールに出力されます。Apache started successfullyのようなものは標準出力のようです。

Ansibleの脚本から実行する場合でも、それがランダムに失敗したが、私は次のようにserver.shを変更する必要があります。

#!/bin/bash 
nohup server_wrapper.py start & 

はnohupをと&オペレータが問題を修正しているようです。

だから私はそれが問題を引き起こした標準I/O、関連付けられたものですが、私は&はサブシェルを起動し、バックグラウンドで実行されます理解し、&オペレータは私の問題を修正する理由を理解したいですか?

答えて

0

だけ勘が、私はそれが$APACHE_HOMEすべきではない

cmd = "$APATCH_HOME/scripts/service.sh restart"

を参照してください。 (おそらく、ローカルで起動するときに機能するためではないでしょう)

しかし、私の経験から、ローカルとリモートの実行の違いは、環境の違いが原因であることがわかります。

server.shset > /tmp/env_$$.outを追加し、ローカルとAnsibleの両方で実行し、2つの出力ファイルの(関連する)相違点を確認してください。

関連する問題