计算化学公社

标题: shell中的循环问题 [打印本页]

作者
Author:
Theor_Comp    时间: 2018-6-24 10:30
标题: shell中的循环问题
请问大家,在shell脚本中使用循环,如何让其执行完一个循环之后再开始下一个循环,也就是未完成当前循环时则一直等待直至该次循环完成后再开始下一个循环?for while好像是同步以此执行完所有的循环

作者
Author:
sobereva    时间: 2018-6-24 11:20
不知道你具体怎么写的
可尝试在命令后面加个wait命令,这样之前交到后台的任务执行完才会执行下一个
作者
Author:
Theor_Comp    时间: 2018-6-24 11:38
sobereva 发表于 2018-6-24 11:20
不知道你具体怎么写的
可尝试在命令后面加个wait命令,这样之前交到后台的任务执行完才会执行下一个

for ((i=0;i<5;i++)); do
  cd dir$i
  sbatch submit$i.slm
  wait
done
for循环加入wait之后,也是会同步一次地把所有的任务提交,而并不是等待submit0.slm完成后再提交submit1.slm,我希望它能等待该次循环完成后再开始下一次循环,该如何实现呢?

作者
Author:
sobereva    时间: 2018-6-24 11:44
Theor_Comp 发表于 2018-6-24 11:38
for ((i=0;i

是提交到远程机子上运行?那么sbatch submit$i.slm提交上去之这个任务就算做完了,就直接做下一轮了
我不清楚你的提交脚本具体怎么运行。比如如果提交完之后,任务算完了,会自动返回来一个文件,那么你可以尝试写个无限循环,每10秒检测一次,等检测到某个文件出现了,就从无限循环里跳出来,到下一轮
作者
Author:
Theor_Comp    时间: 2018-6-24 12:56
本帖最后由 Theor_Comp 于 2018-6-24 12:57 编辑
sobereva 发表于 2018-6-24 11:44
是提交到远程机子上运行?那么sbatch submit$i.slm提交上去之这个任务就算做完了,就直接做下一轮了
我 ...

是远程提交,目的是:先提交submit0.slurm, 等submit0.slurm结束后会生成file文件,等生成file文件后再提交submit1.slurm
是下面这个代码吗
for ((i=0;i<5;i++)); do
  cd dir$i
  sbatch submit$i.slm
  while true; do
  sleep 10
  if [ -e $file ];  then
  continue
  fi
  done
done

作者
Author:
sobereva    时间: 2018-6-24 13:25
Theor_Comp 发表于 2018-6-24 12:56
是远程提交,目的是:先提交submit0.slurm, 等submit0.slurm结束后会生成file文件,等生成file文件后再提 ...

差不多。你试试吧
作者
Author:
lonemen    时间: 2018-6-28 20:50
收藏备用。
作者
Author:
赵云跳槽    时间: 2018-6-29 23:11
Theor_Comp 发表于 2018-6-24 12:56
是远程提交,目的是:先提交submit0.slurm, 等submit0.slurm结束后会生成file文件,等生成file文件后再提 ...

LZ这个脚本好像运行不成功,我是使用到g09上的

如果LZ运行成功了,能否将脚本复制出来看看?




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3