システム用のデプロイメントエンジンを作成しています。各プロジェクトでカスタムデプロイメントの指示が指定されています。サブプロセス間の環境状態を維持する.Popenコマンド?
ノードはEC2上で実行されています。
プロジェクトの1つは、サードパーティアプリケーションのソースバージョンによって異なります。
は、具体的に:cd /tmp
ので、
def deploy():
ShellCommand("apt-get remove ffmpeg x264 libx264-dev")
ShellCommand("apt-get update")
ShellCommand("apt-get install -y build-essential checkinstall yasm texi2html libfuse-dev fuse-utils libcurl4-openssl-dev libxml2-dev mime-support libfaac-dev libjack-jackd2-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libvorbis-dev libvpx-dev libx11-dev libxfixes-dev libxvidcore-dev zlib1g-dev")
ShellCommand("cd /tmp")
s3cmd_sync("s3://.../tools/x264_20_12_2010.zip", "/tmp/x264_20_12_2010.zip")
ShellCommand("unzip x264_20_12_2010.zip")
ShellCommand("cd x264_20_12_2010")
ShellCommand("./configure")
ShellCommand("make")
ShellCommand(r'checkinstall --pkgname=x264 --pkgversion "2:0.HEAD" --backup=no --deldoc=yes --fstrans=no --default')
悲しいことに、これは失敗します。
cd /tmp
wget s3://.../tools/x264_20_12_2010.zip
unzip x264_20_12_2010.zip
cd x264_20_12_2010
./configure
make
checkinstall --pkgname=x264 --pkgversion "2:0.HEAD" --backup=no --deldoc=yes --fstrans=no --default
現在、私は(内部的にsubprocess.Popenを使用しています)のbotoのにShellCommandでこれをやっているが、これは次のようになりますサブプロセスに適用されます。つまり、私が父のプロセスを返し、2番目のShellCommandを発行すると、exeenvは父から継承されます。私はシェルコマンドの実行フレームワークが必要ですコンテキストを失うことなく、同じサブプロセス内のコマンド。
この問題の推奨解決策は何ですか?コマンドラインで実行されるアプリのログは非常に重要です(どうすればデバッグなしでデバッグできますか)。これはShellCommandが好きな理由です(興味がある場合はbotoログを参照)。
ありがとう、
マキシム。