`
singleant
  • 浏览: 374928 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

【shell】串行执行批量任务脚本

阅读更多

前阵放假时候,帮人跑实验,需要在一台服务器上跑一堆java实验程序。

为了实验结果的公正性,要保证每次只跑一个实验,也就是需要串行的跑完所有java程序。

刚开始的时候,我每跑一个程序,隔一段时间去服务器上检查一下是否跑完,需要时时留意,实在有点不爽,人也不能走开。

于是写了个shell脚本:串行的去执行一批java程序任务列表。

过程如下:

1.新建任务列表

以实验为例的tasklist.txt:

java -cp fastPPV0318.jar -Xms512m -Xmx1024m  -Dppv.config=/home/zhufw/fastppv/config/ppv_dblp_30000_hybridG1O1.properties fanwei.ppv.preprocess.hubselection.HybridG1O1Selection 1 1 dblp > dblpHybridG1O1Selection.log
java -cp fastPPV0318.jar -Xms512m -Xmx1024m  -Dppv.config=/home/zhufw/fastppv/config/ppv_dblp_30000_hybridG1O1.properties fanwei.ppv.preprocess.hubselection.HybridG1O1Selection 0.5 1 dblp > dblpHybridG1O1Selection.log
java -cp fastPPV0318.jar -Xms512m -Xmx1024m  -Dppv.config=/home/zhufw/fastppv/config/ppv_dblp_30000_hybridG1O1.properties fanwei.ppv.preprocess.hubselection.HybridG1O1Selection 1 2 dblp > dblpHybridG1O1Selection.log
java -cp fastPPV0318.jar -Xms1024m -Xmx2048m  -Dppv.config=/home/zhufw/fastppv/config/ppv_dblp_30000_hybridG1O1.properties fanwei.ppv.execution.LocalPPVSerializerMain  > dblpHybridG1O1LocalPPV.log
java -cp fastPPV0318.jar -Xms1024m -Xmx2048m  -Dppv.config=/home/zhufw/fastppv/config/ppv_dblp_30000_hybridG0.5O1.properties fanwei.ppv.execution.LocalPPVSerializerMain  > dblpHybridG0.5O1LocalPPV.log
java -cp fastPPV0318.jar -Xms1024m -Xmx2048m  -Dppv.config=/home/zhufw/fastppv/config/ppv_dblp_30000_hybridG1O2.properties fanwei.ppv.execution.LocalPPVSerializerMain  > dblpHybridG1O2LocalPPV.log
java -cp fastPPV0318.jar -Xms1024m -Xmx2048m  -Dppv.config=/home/zhufw/fastppv/config/ppv_dblp_30000_hybridG1O1.properties fanwei.ppv.execution.OnlineQueryProcess > dblpHybridG1O1Query.log
java -cp fastPPV0318.jar -Xms1024m -Xmx2048m  -Dppv.config=/home/zhufw/fastppv/config/ppv_dblp_30000_hybridG0.5O1.properties fanwei.ppv.execution.OnlineQueryProcess > dblpHybridG0.5O1Query.log
java -cp fastPPV0318.jar -Xms1024m -Xmx2048m  -Dppv.config=/home/zhufw/fastppv/config/ppv_dblp_30000_hybridG1O2.properties fanwei.ppv.execution.OnlineQueryProcess > dblpHybridG1O2Query.log
 

2.编写串行批量运行脚本

batchRun.sh:

#!/bin/bash
if [ "$1" = "" ] ; then
   echo "Bad command. No tasklist file been appointed. Right format: $0 [tasklist.txt]"
   exit 1
fi
tasks=`cat $1|wc -l`
echo "total tasks founded:$tasks"
echo "Now begin running....."
cat $1|while read line
do
tasks=`jps|wc -l`
while [ $tasks -gt 1 ]
  do
    sleep 20
        echo "task is running"
    tasks=`jps|wc -l`
  done
$line &
echo "running $line"
sleep 5
done
echo "end."

以上脚本只是简单的一个脚本,会依次读取tasklist.txt里的任务,并每隔20秒检查一下是否有java程序在运行,如果没有,则执行当前读取到的任务,否则循环检查。

3.执行脚本

./batchRun.sh tasklist.txt > batchRun.log &

 

OK,白天可以和朋友出去玩了,晚上回来检查结果。

脚本很简单,也不完美,有很大局限性,不过让机器去胜任,能很大提升效率。

1
1
分享到:
评论
1 楼 haclyone 2012-04-06  
学习了,我以前也遇到过楼主一样的问题,当时我怎么就没有想到呢

相关推荐

Global site tag (gtag.js) - Google Analytics