我有一个通常在SLURM下运行的代码。像
if ! lengthy_command
then
echo "Error occured"
fi
出于会计目的,我想转到基于srun
的命令启动:
if ! srun <srun params> lengthy_command
then
echo "Error occured"
fi
但是更改该行之后,该脚本将不再在交互式会话中运行(在SLURM之外)。有什么办法可以概括脚本,使其可以在两种情况下运行?我在srun
文档中看不到指向该方向的任何内容。
答案 0 :(得分:1)
一种选择是使用变量并将其设置为srun
(例如,在设置$SLURM_JOBID
时),否则将其保留为空。
if [ -n $SLURM_JOBID ] ;
then
LAUNCH=srun <srun params>
else
LAUNCH=
fi
if ! $LAUNCH lengthy_command
then
echo "Error occured"
fi
可以通过在使用GNU并行时将LAUNCH
设置为parallel <parallel options>
或在具有其他调度程序的集群中运行时将其设置为其他命令来扩展此方法。
另一种选择是创建一个名为srun
的Bash函数,该函数封装了逻辑(未经测试):
srun() {
if [ -n $SLURM_JOBID ] ;
then
command srun $@
else
$@
fi
}