在运行期间更改发送到slbm中的sbatch的bash脚本是个坏主意?

前端之家收集整理的这篇文章主要介绍了在运行期间更改发送到slbm中的sbatch的bash脚本是个坏主意?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想通过sbatch_run.sh脚本多次运行带有不同参数的python脚本main.py,如下所示:
#!/bin/bash
#SBATCH --job-name=sbatch_run
#SBATCH --array=1-1000
#SBATCH --exclude=node047

arg1=10 #arg to be change during runs
arg2=12 #arg to be change during runs
python main.py $arg1 $arg2

参数在sbatch运行的bash文件中编码.我担心如果我一个接一个地运行sbatch_run.sh但是在每次运行期间更改了arg1和arg2的值,那么它可能会导致我的运行中出错.例如,如果我这样做:

sbatch sbatch_run.sh # with arg1=10 and arg2=12

然后在我更改sbatch_run.sh之后立即再次运行该文件,如下所示:

sbatch sbatch_run.sh # with arg1=69 and arg2=666

将我的运行全部运行到最后一个(即arg1 = 69和arg2 = 666),而不是每个运行自己的参数.

我确信如果我在main.py中对参数进行硬编码然后运行相同的sbatch脚本但是更改main.py将运行最后一个.我想知道如果我改变sbatch_run.sh脚本也是如此.

你知道,我确实试过这个实验,运行1000个脚本,然后有些人排队并发出一个睡眠命令,然后更改sbatch_run.sh.它似乎并没有改变我的跑步,但是,如果我错了,这太重要了,不会出错,并且想确保我也问过.

为了记录,我跑了:

#!/bin/bash
#SBATCH --job-name=ECHO
#SBATCH --array=1-1000
#SBATCH --exclude=node047

sleep 15
echo helloworld
echo 5

然后将回声更改为echo 10或echo byebyeworld.

运行sbatch时,Slurm将提交脚本复制到其内部数据库;您可以通过以下实验说服自己:
$cat submit.sh
#!/bin/bash
#SBATCH  --hold
echo helloworld

– 在那里确保工作没有开始.提交:

$sbatch submit.sh

然后修改提交脚本:

$sed -i 's/hello/bye/' submit.sh
$cat submit.sh
#!/bin/bash
#SBATCH  --hold
echo byeworld

现在使用control show job来查看Slurm计划运行的脚本:

$scontrol show -ddd job YOURJOBID
JobId=******* JobName=submit.sh
[...]
BatchScript=
   #!/bin/bash
   #SBATCH  --hold
   echo helloworld
[...]

虽然原始脚本有,但它没有改变.

[编辑] Slurm的最新版本使用scontrol写入batch_script而不是scontrol show -dd job来显示提交脚本.

猜你在找的Bash相关文章