免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 10009 | 回复: 16
打印 上一主题 下一主题

想寻找一个批量提交作业的脚本! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-19 12:32 |只看该作者 |倒序浏览
现在作业是采用pbs提交的形式
pbs里面的
#PBS -S /bin/bash
#PBS -N g09A01
#PBS -j oe
#PBS -q batch
#PBS -l nodes=1:ppn=8      
#PBS -l walltime=1860:00:00
#PBS -V


# Define variable "jobname".

jobname=009-PBE0-part4-

username=`whoami`

# Define the location where Gaussian was installed and run
# a setup script, g09.profile.
source /export/gaussian/g09A01/g09/g09.sh

每次都是替换jobname=后面的文件名,然后qsub g09.pbs

有啥省事的办法,一次提交,保留5个作业,少于5个就补充!

文件都是.com文件,文件名没有规律性!

论坛徽章:
0
2 [报告]
发表于 2012-03-20 21:52 |只看该作者
如果不管作业数量,一次性提交,也就是要求用指定的文件名替换jobname=后面的内容,然后提交,用sed得怎么写

论坛徽章:
0
3 [报告]
发表于 2012-03-20 22:06 |只看该作者
没看太明白.迷糊

论坛徽章:
0
4 [报告]
发表于 2012-03-20 22:08 |只看该作者
回复 2# super_fan_cu


    filename=009-xx-ttt-
sed -i -r "/\s*jobname=/c jobname=$filename" your-filename

论坛徽章:
0
5 [报告]
发表于 2012-03-20 22:27 |只看该作者
回复 4# yuhuohu


    没有看明白,我的意思是,当前文件夹下有n个需要提交的com文件,1.com qa.com ------
总之没有规律,将文件名去掉.com赋值到jobname=1(第一个文件)然后提交,后面是第二第三个----

刚刚写了一个笨的,采用删除,添加行的办法搞定了,不要见笑

#!/bin/bash
`ls -l *.com | awk '{print $9}' | sed 's/.com//g' > file_list`
cat file_list | while read each_file
do
sed -i '30d'  g09b.pbs
sed -i "29 a\jobname=$each_file" g09b.pbs
qsub g09b.pbs
done

论坛徽章:
0
6 [报告]
发表于 2012-03-20 22:34 |只看该作者
本帖最后由 yuhuohu 于 2012-03-20 22:38 编辑

回复 5# super_fan_cu

这样应该更简单,不用创建临时文件

  1. #!/bin/bash
  2. ls -l *.com \
  3. | awk '{print $NF}'\
  4. | sed 's/.com//g' \
  5. | while read each_file
  6. do
  7.    sed -i -r "/^\s*jobname=/c jobname=$each_file/" g09b.pbs
  8.    qsub g09b.pbs
  9. done
复制代码
^\s*是为了防止jobname=前面有空格,c是直接替换该行

我明白你的意思了,我再看看有没有办法保留5个作业,g09b.pbs名字需要修改吗,还是一直不变?

论坛徽章:
0
7 [报告]
发表于 2012-03-20 22:44 |只看该作者
本帖最后由 yuhuohu 于 2012-03-21 12:30 编辑

  1. #!/bin/bash
  2. counts=$(ls -l *.com|wc -l)

  3. ls -l *.com \
  4. | awk '{print $NF}'\
  5. | sed 's/.com//g' \
  6. | while read each_file
  7. do
  8.    sed -i -r "/^\s*jobname=/c jobname=$each_file" g09b.pbs
  9.    qsub g09b.pbs &
  10.    a=$((a+1))
  11.    [[ $a -eq $counts ]]&&break
  12.    while((1))
  13.    do
  14.         thread=$(ps -ef|grep 'qsub g09b.pbs'|grep -v grep|wc -l)
  15.         [[ $thread -lt 5 ]]&&break||sleep 1
  16.    done
  17.    sleep 1
  18. done
复制代码
没试过while里面嵌套while,不行的话换for((i=0;;i++))

加个counts判断,免得死循环

论坛徽章:
0
8 [报告]
发表于 2012-03-20 22:50 |只看该作者
yuhuohu 发表于 2012-03-20 22:44
没试过while里面嵌套while,不行的话换for((i=0;;i++))



sed -i -r "/^\s*jobname=/c jobname=$each_file/" g09b.pbs
这行会在g09b里面留下/去掉最后/ 就ok了

论坛徽章:
0
9 [报告]
发表于 2012-03-20 22:52 |只看该作者
回复 8# super_fan_cu


    对,不过我编辑了一下,加了个文件数判断,免得死循环

论坛徽章:
0
10 [报告]
发表于 2012-03-20 22:55 |只看该作者
回复 8# super_fan_cu


    但还有个小小问题
如果在
counts=$(ls -l *.com|wc -l)

ls -l *.com

这2条命令之间又生成了一个新的.com文件,那这个新文件不会被提交.哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP