RocksクラスターでSGEを使用して実行されているレガシー科学コードがいくつかあります。qsubスクリプト(つまり、Sun Grid Engineが取得して実行するスクリプト)を生成するアプリケーション固有のジョブ送信スクリプトがあります。
qsubスクリプト内で、私のレガシーアプリが呼び出されます。このアプリは、その出力をSTDOUTに送信します。SGEはSTDOUTをインターセプトし、ユーザーのホームディレクトリ内のファイルにスプールするため、ユーザーは結果がリアルタイムで蓄積されるのを確認できます。この動作を維持したいのですが、同時に、すべての出力をバックグラウンドで透過的にログに記録したいと思います。ティーはこれを達成するのに最適だと思いました。
そこで、アプリを実行し、STDOUTをteeにパイプするようにジョブ送信スクリプトを変更しました。これにより、ジョブが完了すると中央ストアにコピーされるファイルにSTDOUTが保存されます。アプリは実行され、次のようにteeにパイプされます。
\$GMSCOMMAND | tee \$SCRATCHDIR/gamess_output.log
問題は、コードをteeにパイプし始めてから、特に複数のノードを要求したときに、アプリがSIGTERMで死んでしまうことです。teeで-i(割り込みを無視)パラメーターを使用してみました。違いはありません。
アプリの出力をファイルにリダイレクトし、アプリが完了したらファイルをcatにすると、問題なく動作しますが、ユーザーが結果の蓄積をリアルタイムで表示できるようにすることはできません(これは重要な要件です)。
なぜこのティーの使用が失敗するのかについてのアイデアはありますか?または、代わりに、他にどのようにして目的の機能を実現できるかについてのアイデアはありますか?