2

如果作业意外失败,HTCondor 允许重试作业。但是,这样做会导致失败作业的标准输出和标准错误文件在重试时被作业覆盖。这妨碍了调试以找出某些作业失败的原因。

有没有办法指定作业的每次尝试都应该有输出?

演示问题的示例配置脚本和可执行文件:

Universe = vanilla
Executable = usually_crash.sh
Output = $(Cluster).$(Process).stdout
Log = $(Cluster).$(Process).log
max_retries = 100
Queue

通常_crash.sh:

#!/bin/bash
random=$(($RANDOM % 10)) 
echo $random
exit $random

运行时,此作业通常会失败几次,但一旦成功,来自失败作业的所有标准输出和标准错误都会被覆盖。

4

1 回答 1

0

我不确定是否有直接在 HTCondor 中执行此操作的好方法。假设没有共享文件系统,并且我们正在使用 HTCondor 文件传输,我会更改提交文件以将输出文件显式传输到每次执行尝试中,并且每次都有一个外壳包装器附加到该文件,例如

# crash.sub
executable = usually_crash.sh
should_transfer_files = yes
when_to_transfer_output = on_exit_or_evict
transfer_input_files = out
log = log
max_retries = 100
queue

然后让一个 shell 包装器显式地将标准输出附加到该文件:

通常_crash.sh:

#!/bin/bash

exec >> out
r=$(($RANDOM % 10))
echo $r
exit $r
于 2019-08-24T14:46:42.507 回答