Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在unixshell脚本中进行并行处理?_Unix_Ant_Shell_Parallel Processing_Weblogic 10.x - Fatal编程技术网

如何在unixshell脚本中进行并行处理?

如何在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控

我有一个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任务,因为在这种情况下,用户将无法知道任务何时完成,这对于该脚本至关重要

您能为实现这一点提供一些建议吗?

创建此脚本(
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; } &