私のような仕事がある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、関連付けられたものですが、私は&はサブシェルを起動し、バックグラウンドで実行されます理解し、&オペレータは私の問題を修正する理由を理解したいですか?