找回密码
 新注册用户
搜索
查看: 5141|回复: 7

[分享] 利用Linux脚本实现计划FAH任务数量

[复制链接]
发表于 2010-3-31 11:27:30 | 显示全部楼层 |阅读模式
本帖最后由 panzerkiller 于 2010-3-31 22:10 编辑

原理:
利用脚本监视进程,当检测到进程中没有fah运行的时候自动启动;如果检测到fah程序已经运行,等待若干分钟再检测。
延伸:
可以建立一个joblist.lst文件来保存不同的启动命令,在命令中加入-oneunit参数,这样就可以有计划的跑不同的参数,比如像我,跑完一个bigadv大包想歇两天,每天只开半天跑smp2,joblist.lst可以预先编辑成

screen -d -m ./fah6 -local -smp 8 -bigadv -verbosity 9 -oneunit
screen -d -m ./fah6 -local -smp 7 -advmethods -verbosity 9 -oneunit
screen -d -m ./fah6 -local -smp 7 -advmethods -verbosity 9 -oneunit
screen -d -m ./fah6 -local -smp 7 -advmethods -verbosity 9 -oneunit
screen -d -m ./fah6 -local -smp 8 -bigadv -verbosity 9 -oneunit

(略)”

上code,本人非编程出身,遇到复杂情况没有啥技巧,哪位能用帮忙精简一下,感激不禁

#! /bin/bash
#The original code came from http://bbs.ustc.edu.cn/cgi/bbscon?bn=Linux&fn=M4B696189
sleep 600 #stop 10min to make sure the system is start-up well
list="/home/xxx/folding/joblist.lst" #File that contains submit-job commands
job=`head -n1 $list` #Load the first line
num_job=`less $list |wc -l`
job_exe="fah6"
num_cpu=1
rm -f joblist.tmp

while [ "$num_job" -ge 2 ]
do
        for ((i=0; i<1000; i++))
        do
                job_count=`ps -ef|grep $job_exe | grep -v "grep"|grep -v "SCREEN"|wc -l`

                while [ "$job_count" -ge "$num_cpu" ]
                do
                sleep 1800 # 如果当前有num_cpu个任务在运行的话,等1800秒再检查一次
                job_count=`ps -ef|grep $job_exe | grep -v "grep"|grep -v "SCREEN"|wc -l`
                echo $job_count         
                done
# 现在有CPU空闲了,运行一个任务
        pushd /home/xxx/folding/smp
        $job &
        echo `date`
        echo $job
        popd
# Remove the submitted job from joblist
        cp $list joblist.tmp; sed 1d joblist.tmp > $list ; rm -f joblist.tmp
        sleep 120
        job=`head -n1 $list` #Load the next line
        num_job=`less $list |wc -l`
        echo $num_job
        sleep 600 #Wait 10 minutes to make sure fah starts properly
done
done

评分

参与人数 3基本分 +45 收起 理由
eqzero + 15 精品文章
金鹏 + 15 感谢兄弟分享
cicikml + 15 这个……看不懂……不过很强

查看全部评分

回复

使用道具 举报

发表于 2010-3-31 11:40:20 | 显示全部楼层
必须要顶你了,呵呵
回复

使用道具 举报

发表于 2010-3-31 12:11:24 | 显示全部楼层
这个必须顶!
回复

使用道具 举报

发表于 2010-3-31 12:33:00 | 显示全部楼层
好贴,要顶得
回复

使用道具 举报

发表于 2010-3-31 13:06:31 | 显示全部楼层
感谢兄弟分享经验
回复

使用道具 举报

 楼主| 发表于 2010-3-31 21:37:24 | 显示全部楼层
晕~睡一宿觉才发现有bug,刚刚改过来,显示红字部分
回复

使用道具 举报

发表于 2010-4-26 20:02:23 | 显示全部楼层
ps -ef|grep $job_exe | grep -v "grep"|grep -v "SCREEN"|wc -l

这些管道少用行吗?
回复

使用道具 举报

 楼主| 发表于 2010-4-26 23:19:29 | 显示全部楼层
只要能抓出你要的进程就行,我只会grep+"|",所以搞得很复杂;这个脚本一定先试运行调试好了再跑fah,我当时调得被服务器认为机器不稳定,挂起24hr;脚本可能还有小bug,脚本运行几个小时后,找不到这个脚本的进程,也不知道是循环到头了还是出错。

ps -ef|grep $job_exe | grep -v "grep"|grep -v "SCREEN"|wc -l

这些管道少用行吗?
zglloo 发表于 2010-4-26 20:02
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 新注册用户

本版积分规则

论坛官方淘宝店开业啦~

Archiver|手机版|小黑屋|中国分布式计算总站 ( 沪ICP备05042587号 )

GMT+8, 2024-5-15 05:42

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表