質問

私はSGEと、岩のクラスタ上で実行されているいくつかのレガシー科学的なコードを持っています。私は、qsubのスクリプトを生成するアプリケーション固有のジョブ投入スクリプトを持っている(すなわち、Sun Grid Engineのがかかり、スクリプトの実行)。

はqsubのスクリプトの中で、私のレガシーアプリケーションが呼び出されます。このアプリは、STDOUTへの出力を送信します。ユーザーは結果がリアルタイムに蓄積見ることができるようにSGEは、ユーザーのホームディレクトリ内のファイルにSTDOUTとスプールそれを傍受します。私は、この動作を維持することにしたいが、同時に、私は透過的にバックグラウンドですべての出力をログに記録します。私はTシャツがこれを達成するために完璧になる考え出します。

だから私は、仕事の完了後、中央ストアにコピーされたファイルにSTDOUTを保存しティーにアプリやパイプSTDOUTを実行するためのジョブ投入スクリプトを修正しました。次のようにアプリが実行され、ティーにパイプされます:

\$GMSCOMMAND | tee \$SCRATCHDIR/gamess_output.log
問題は、私はTシャツにコードをパイプ始めました以来、このアプリは、私はいくつかのノードを要求する場合は特に、SIGTERMsで死にかけてきましたさ。それは違いはありません:私はティーと-i(割り込みを無視する)パラメータを使用してみました。

私は猫、ファイルへのアプリケーションの出力をリダイレクトする場合は、

物事作業罰金アプリいったんファイルが(重要な要件である)で行われるが、その後、私はリアルタイムで表示結果の蓄積にユーザーを許可することはできません。

Tシャツのこの使用が失敗する可能性がある理由についての任意のアイデア?または代わりに、私が所望の機能を達成する可能性がどのように他についての任意のアイデア?

役に立ちましたか?

解決

私はあなたの特定のケースが失敗した理由について何も知りませんが、一つの選択肢は$GMSCOMMANDが、それは独自のロギングだ間に合わせるためにあるかもしれません。 (効果的にアプリ内のティーを置きます)。私は、このオプションは、レガシーアプリを変更するコストに依存思います。

あなたはリダイレクト/重複を行うには、独自のスクリプト/アプリケーションと「レガシーアプリ」を包むことができることを失敗ます。

他のヒント

パイプがあなたの問題である場合は、

おそらくあなたは、プロセス置換を有する「しばらく読み取り/」ループを使用することによって、これを回避できます。あなたのためにこの仕事をしていますか?

while read line; do
    echo "$line"
    echo "$line" >> ${SCRATCHDIR}/gamess_output.log
done <(${GMSCOMMAND})
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top