我使用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
文本。所以我得出結論,如果執行程序的節點很忙,那麼文件不會被更新。所以我的問題是,有沒有辦法手動更新輸出文件或以更好的方式收集關於程序進度的任何信息?
由於已經
最大
您的執行節點是否使用共享文件系統,或者您的ShouldTransferFiles設置爲TRUE? – eduffy
我遵循我的大學指南,並指出對於他們的系統,「should_transfer_files」總是設置爲「TRUE」,除非另有規定。我會重新運行這個選項來確保。 –
TRIED IT:當指定'should_transfer_files'和'when_to_transfer_output'值時,'stringstream'(通過C++)創建的文件不能再被訪問/創建。它不起作用,即使我刪除了整個'stringstream',並且只保留在控制檯輸出中,並且所有condor值都如您所述設置。 –