如何在unixshell脚本中进行并行处理?
我有一个shell脚本,它将build.xml文件传输到远程unix机器(devrssp02),并在该机器上执行ANT任务wldeploy(devrssp02)。现在,此wldeploy任务大约需要15分钟才能完成,在运行时,unix控制台的最后一行是- “任务{某些数字}已初始化” 一旦这个任务完成,我们会得到一个“taskcompleted”消息,脚本中的下一个任务将在这之后执行 但有时,weblogic域可能存在问题,并且部署可能在内部失败,对wldeploy任务的状态没有影响。unix控制台仍将停留在“任务{some digit}初始化”状态。部署错误将记录在名为output.a的文件中 所以,我现在想要的是- 在运行wldeploy之前启动时间计数器。如果wldeploy运行超过15分钟,则应运行以下命令- tail-f output.a###而不终止wldeploy 或 cat输出。a###在终止WLP后强制部署 这里需要注意的一点是-我不能在后台运行wldeploy任务,因为在这种情况下,用户将无法知道任务何时完成,这对于该脚本至关重要 您能为实现这一点提供一些建议吗?创建此脚本(如何在unixshell脚本中进行并行处理?,unix,ant,shell,parallel-processing,weblogic-10.x,Unix,Ant,Shell,Parallel Processing,Weblogic 10.x,我有一个shell脚本,它将build.xml文件传输到远程unix机器(devrssp02),并在该机器上执行ANT任务wldeploy(devrssp02)。现在,此wldeploy任务大约需要15分钟才能完成,在运行时,unix控制台的最后一行是- “任务{某些数字}已初始化” 一旦这个任务完成,我们会得到一个“taskcompleted”消息,脚本中的下一个任务将在这之后执行 但有时,weblogic域可能存在问题,并且部署可能在内部失败,对wldeploy任务的状态没有影响。unix控
deploy.sh
例如):
然后从控制台
chmod +x deploy.sh
然后跑
./deploy.sh
此脚本将启动一个计数器(15分钟),如果wldeploy
进程正在运行,它将强制终止该进程,如果进程正在运行,您将看到output.a
的内容
如果脚本已终止,则pkill
将不会返回true和输出。将不会显示
我将此任务称为监视而不是“并行处理”:这只会终止它启动的wldeploy进程,告诉您wldeploy是返回成功还是失败,并在wldeploy完成后运行不超过30秒
它应该与sh兼容,但我现在访问的/bin/sh似乎有一个中断的wait命令
#!/bin/ksh
wldeploy &
while [ ${slept:-0} -le 900 ]; do
sleep 30 && slept=`expr ${slept:-0} + 30`
if [ $$ = "`ps -o ppid= -p $!`" ]; then
echo wldeploy still running
else
wait $! && echo "wldeploy succeeded" || echo "wldeploy failed"
break
fi
done
if [ $$ = "`ps -o ppid= -p $!`" ]; then
echo "wldeploy did not finish in $slept seconds, killing it"
kill $!
cat output.a
fi
对于不终止wldeploy的部分,只需在
{ sleep 900; tail -f output.a; } &
对于使用kill it的部分,它更复杂,因为您已经确定了wldeploy过程的PID。pra的答案正是这样做的,所以我只想提到这一点。不过,请注意不要同时运行deploy.sh的多个副本。嗨,Andy。这种方法只需在900秒后终止wldeploy。那不是我想要的。谢谢你的回复。你好,比克拉姆,这将只终止它的运行,并将输出您指定的调试。嗨,普拉,这几乎正是我要找的。用它来制定我需要的代码。但我面临一个奇怪的问题。当我运行脚本时,每隔一段时间就会显示“wldeploy仍在运行”。但有时候这样行,有时候不行。e、 我第一次运行它时,它运行得很好。第二次,“wldeploy仍在运行”消息根本没有出现。下一次,它又起作用了;等等无法找出发生这种情况的原因:(有什么想法吗?顺便说一下,我的代码是-antdeploy&limit=600 deploy_check(){while[${sleep:-0}-le$limit];dosleep 60&&sleep=expr${sleep:-0}+60
如果[$$$=”ps-oppid=-p$!
”],那么echo“deploy仍在运行。$sleep secs”否则等待$!&echo“App deployment成功”|“部署失败”break fi done}deploy\u检查[$=”ps-o ppid=-p$!
“];然后echo“部署没有在$sleep秒内完成。这是日志。“ant log echo”按Ctrl+C终止。按Enter继续。“读取日志限制=expr${limit}”+300
deploy\u check fiDennis在你的其他问题中发现了你修改后的脚本的大部分问题。在那里回复。
{ sleep 900; tail -f output.a; } &