2012-10-31 40 views
3

我使用Condor運行了幾個模擬程序,並對程序進行了編碼,以便它在控制檯中輸出進度狀態。這是在循環結束時完成的,它只是打印當前時間(這也可以是百分比或經過的時間)。該代碼看起來是這樣的:Condor輸出文件更新

 
printf("START"); 
while (programNeedsToRum) { 

    // Run code repetitive code... 

    // Print program status update 
    printf("[%i:%i:%i]\r\n", hours, minutes, seconds); 
} 
printf("FINISH"); 

當正常執行(即在終端/ CMD/bash)的這工作得很好,但禿鷹節點似乎沒有printf()狀態做。只有模擬完成後,所有狀態更新纔會輸出到文件,但不再使用。我提交給禿鷹我* .SUB文件看起來像這樣:

 
universe = vanilla 
executable = program 
output = out/out-$(Process) 
error = out/err-$(Process) 
queue 100 

當提交的程序執行(這證實了condor_q)和輸出文件包含此:

 
START 

只有一次的程序完成運行其相應的輸出文件顯示(例如):

 
START 
[0:3:4] 
[0:8:13] 
[0:12:57] 
[0:18:44] 
FINISH 

雖然程序執行時,在輸出文件僅包含START文本。所以我得出結論,如果執行程序的節點很忙,那麼文件不會被更新。所以我的問題是,有沒有辦法手動更新輸出文件或以更好的方式收集關於程序進度的任何信息?

由於已經

最大

+0

您的執行節點是否使用共享文件系統,或者您的ShouldTransferFiles設置爲TRUE? – eduffy

+0

我遵循我的大學指南,並指出對於他們的系統,「should_transfer_files」總是設置爲「TRUE」,除非另有規定。我會重新運行這個選項來確保。 –

+0

TRIED IT:當指定'should_transfer_files'和'when_to_transfer_output'值時,'stringstream'(通過C++)創建的文件不能再被訪問/創建。它不起作用,即使我刪除了整個'stringstream',並且只保留在控制檯輸出中,並且所有condor值都如您所述設置。 –

回答

1

你想要做的是使用流式輸出選項見stream_errorstream_output選項,你可以傳遞給condor_submit所概述這裏:http://research.cs.wisc.edu/htcondor/manual/current/condor_submit.html

默認情況下,HTCondor店輸出和錯誤的執行節點,並將它們傳送回對工作完成後提交節點上本地設置stream_outputTRUE會問HTCondor在輸出返回到提交節點時改爲輸出流。您可以隨時檢查它。

2

這裏的東西我幾年前用來解決這個問題。它使用condor_chirp,用於將文件從執行主機傳輸到提交者。我有一個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秒發送一次輸出..你可能想要調整它。

1

condor_tail您可以查看正在運行的進程的輸出。 看到標準輸出只需添加作業-ID(如果你想緊跟在輸出看到更新-f例:

condor_tail 314.0 -f