4

コンドルを使用していくつかのシミュレーションを実行しており、コンソールに進行状況を出力するようにプログラムをコーディングしました。これはループの最後で行われ、現在の時刻が単純に出力されます (これはパーセンテージまたは経過時間でもあります)。コードは次のようになります。

printf("開始");
while (programNeedsToRum) {

   // コードの繰り返しコードを実行...

   // プログラムのステータス更新を表示
   printf("[%i:%i:%i]\r\n", 時間, 分, 秒);
}
printf("FINISH");

正常に実行している場合 (つまり、ターミナル/cmd/bash で)、これは正常に動作しますが、コンドル ノードは状態に見えませんprintf()。シミュレーションが終了すると、すべてのステータス更新がファイルに出力されますが、それ以降は使用できなくなります。コンドルに送信する *.sub ファイルは次のようになります。

宇宙=バニラ
実行可能 = プログラム
output = out/out-$(プロセス)
error = out/err-$(プロセス)
キュー 100

サブミットされると、プログラムが実行され (これは で確認されcondor_qます)、出力ファイルには次のものが含まれます。

始める

プログラムが対応する出力ファイルの実行を終了すると、次のように表示されます (例):

始める
[0:3:4]
[0:8:13]
[0:12:57]
[0:18:44]
終了

プログラムの実行中、出力ファイルにはSTARTテキストのみが含まれます。そのため、プログラムを実行しているノードがビジー状態の場合、ファイルは更新されないという結論に達しました。私の質問は、出力ファイルを手動で更新する方法や、プログラムの進行状況に関する情報をより良い方法で収集する方法はありますか?

もうありがとう

マックス

4

3 に答える 3

3

あなたがしたいことは、ストリーミング出力オプションを使用することです。ここで概説されているように、渡すことができるstream_errorとオプションを参照してください: http://research.cs.wisc.edu/htcondor/manual/current/condor_submit.htmlstream_outputcondor_submit

デフォルトでは、HTCondor は stdout と stderr を実行ノードにローカルに保存し、ジョブの完了時にそれらを送信ノードに転送します。に設定stream_outputするTRUEと、HTCondor は代わりに出力を送信ノードにストリーミングするように要求されます。その後、発生したときにそれを検査できます。

于 2014-12-25T03:14:22.167 に答える
2

これは、この問題を解決するために数年前に使用したものです。condor_chirp実行ホストからサブミッターにファイルを転送するために使用される which を使用します。本当に実行したいプログラムを実行し、その出力をファイルにリダイレクトする Python スクリプトがあります。次に、定期的に、出力ファイルをサブミット ホストに送り返します。

Python ラッパーは次のstream.pyとおりです。

 #!/usr/bin/python
 import os,sys,time

 os.environ['PATH'] += ':/bin:/usr/bin:/cygdrive/c/condor/bin'
 # make sure the file exists
 open(sys.argv[1], 'w').close()

 pid = os.fork()
 if pid == 0:
    os.system('%s >%s' % (' '.join (sys.argv[2:]), sys.argv[1]))
 else:
    while True:
        time.sleep(10)
        os.system('condor_chirp put %s %s' % (sys.argv[1], sys.argv[1]))
        try:
            os.wait4(pid, os.WNOHANG)
        except OSError:
            break

そして私の送信スクリプト。問題が発生し、出力が次sh hello.shの場所にリダイレクトされました。myout.txt

 universe                = vanilla
 executable              = C:\cygwin\bin\python.exe
 requirements            = Arch=="INTEL" && OpSys=="WINNT60" && HAS_CYGWIN==TRUE
 should_transfer_files   = YES
 transfer_input_files    = stream.py,hello.sh
 arguments               = stream.py myout.txt sh hello.sh
 transfer_executable     = false

出力全体が送信されるため、一度に多数のジョブを実行している場合は考慮してください。現在、10秒ごとに出力を送信しています..それを調整したい場合があります。

于 2012-10-31T15:06:54.510 に答える
1

condor_tail実行中のプロセスの出力を表示できます。stdout を表示するには、job-ID を追加するだけです (出力をたどって更新をすぐに確認したい場合は -f を追加します。例:

condor_tail 314.0 -f
于 2014-11-25T13:54:04.017 に答える