私は最初のPythonプログラム(Python 2.6.6)を書いています。このプログラムは、ユーザーの共通コマンド(Linuxサーバー上でシステム・サービスの開始および停止など)を提供するサーバー上で実行されているさまざまなアプリケーションの開始および停止を容易にします。プロセスを開始して、それをバックグラウンドにするにはどうすればいいですか?
は、私は1つのアプリケーションの起動スクリプトがフォアグラウンドに留まりのでp.communicateは、()永遠に待つこと、
p = subprocess.Popen(startCommand, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, err = p.communicate()
print(output)
問題があることにより、アプリケーションの起動スクリプトを始めています。私はすでにstartCommandの前で "nohup startCommand &"を使用しようとしましたが、期待どおりに動作しませんでした。
#!/bin/bash
LOGFILE="/opt/scripts/bin/logs/SomeServerApplicationStart.log"
nohup /opt/someDir/startSomeServerApplication.sh >${LOGFILE} 2>&1 &
STARTUPOK=$(tail -1 ${LOGFILE} | grep "Server started in RUNNING mode" | wc -l)
COUNTER=0
while [ $STARTUPOK -ne 1 ] && [ $COUNTER -lt 100 ]; do
STARTUPOK=$(tail -1 logs/SomeServerApplicationStart.log | grep "Server started in RUNNING mode" | wc -l)
if ((STARTUPOK)); then
echo "STARTUP OK"
exit 0
fi
sleep 1
COUNTER=$(($COUNTER + 1))
done
echo "STARTUP FAILED"
bashスクリプトは、私のPythonコードから呼び出されます。私は今、アプリケーションの起動スクリプトを呼び出すために、次のbashスクリプトを使用する回避策として
。この回避策は完璧に機能しますが、私はPythonですべてを行うことをお勧めします...
サブプロセスですか? Pythonで私の仕事をどうやって満足させることができますか?
おそらくdstのhttp://stackoverflow.com/questions/1196074/starting- a-background-process-in-python – daTokenizer
必要なときに 'communications'を使うだけです。結果を確認する必要はありませんか?ちょうどそれをavoit ... – klashxx
@klashxx:私は結果が必要です。それは私の問題です...(サーバーが「実行モードで起動しました」の出力を確認する必要があります...) – Ronzo