Condor输出文件更新
Condor output file updating
我正在使用Condor运行几个模拟,并对程序进行了编码,以便在控制台中输出进度状态。这是在循环结束时完成的,它只打印当前时间(也可以是百分比或经过的时间)。代码看起来像这样:
printf("START");while(程序需要Rum){//运行代码重复代码。。。//打印程序状态更新printf("[%i:%i:%i]\r\n",小时、分钟、秒);}printf("完成")
当正常执行时(即在终端/cmd/bash中),这很好,但condor节点似乎没有printf()
状态。只有在模拟完成后,所有状态更新都会输出到文件中,但之后它就不再使用了。我提交给condor的*.子文件如下:
宇宙=香草可执行程序输出=输出-$(进程)error=out/err-$(进程)队列100
提交时,程序执行(在condor_q
中确认),输出文件包含以下内容:
START
只有当程序完成运行后,其相应的输出文件才会显示(示例):
START[0:3:4][0:8:13][0:12:57][0:18:44]FINISH
程序执行时,输出文件仅包含START
文本。因此,我得出的结论是,如果执行程序的节点繁忙,则不会更新文件。所以我的问题是,有没有一种方法可以手动更新输出文件,或者以更好的方式收集有关程序进度的任何信息?
已经感谢
最大
您想要做的是使用流输出选项。请参阅可以传递给condor_submit
的stream_error
和stream_output
选项,如下所示:http://research.cs.wisc.edu/htcondor/manual/current/condor_submit.html
默认情况下,HTCondor将stdout和stderr本地存储在execute节点上,并在作业完成时将它们传输回submit节点。将stream_output
设置为TRUE
将要求HTCondor在输出返回提交节点时对其进行流式传输。然后,您可以在发生时对其进行检查。
这是我几年前用来解决这个问题的东西。它使用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:cygwinbinpython.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秒发送一次输出。。你可能需要调整一下。
使用condor_tail
,您可以查看正在运行的进程的输出。要查看stdout,只需添加作业ID(如果您想跟随输出并立即查看更新,请添加-f。示例:
condor_tail 314.0 -f
- 已修改的LinkedList未在文本文件本身中更新
- 如何更新和删除文本文件中的特定逗号分隔值?C++
- C++中的文件处理:更新行
- 更新到 2020 年 5 月版本后,无法在 Visual Studio 2019 中创建.exe文件
- 尝试使用 EvtSetChannelConfigProperty() 函数更新最大事件日志文件大小时插入的错误值
- Chilkat SFTP 文件修改时间不与上传更新
- 如何在文件中更新
- 你能把文件嵌入到exe中,每次使用都更新吗
- 更新文件请求将导致404
- 根据播放器位置更新文件中的描述
- 从文件中读取值、更改值和更新文件
- 更新文件(c++)中的记录
- 如何在 Xcode 6 中更新文件路径
- 如何在 c++ 中更新文件中的记录
- 如何更新文件中的特定行
- 按排序顺序更新文件
- 如何更新文件的版本
- 使用库更新文件<fstream>(仅覆盖特定部分)
- 在不锁定文件的情况下同步更新文件
- 生成文件和更新文件