shell调用mapreduce结束后无法获取结束状态

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell调用mapreduce结束后无法获取结束状态相关的知识,希望对你有一定的参考价值。

我用JAVA写了mapreduce然后打成jar包,在shell脚本里调用,形式如下:
1, java -classpath ***.jar com.util.Job
2, 处理一些收尾工作。
然后再命令行运行该脚本sh stat.sh
在执行时,先执行mapreduce,但是mapreduce执行结束后,不会调用第二步的收尾语句。也就是说在第一步执行mapreduce结束后,shell脚本没有收到该语句的结束信号,所以就一直卡在那里。直到我control+c时,才会执行第二步的收尾语句。
请问如何能够在执行mapreduce结束后,马上执行后面的语句。

参考技术A 在1后边加两行代码如下:
tmp_pid=$$
kill -9 $tmp_pid追问

这个不行啊,

mapreduce运行结束之后,还是卡在那里,然后我control+C,直接把整个shell脚本全杀死了,连后续的步骤2,都不执行了。。。

追答

把kill的-9参数改成-2试试

追问

也不行,主要是mapreduce执行结束后shell接不到返回值,所以就一直卡着,根本就不会执行tmp_pid=$$和kill -9 $tmp_pid这两句。。。

追答

哦。。调用java是怎么调用的?前台还是后台,后台调用试试行不行。
要不然就只能再写代码检测java程序的运行状态了

shell脚本中调用JAVA 程序,如何让JAVA运行结束后,再执行下面命令(只有java运行完,下面对数据的处理才有用)

思路,调用JAVA ,运行完后,使用sqlplus 修改数据库状态,根据数据库状态再 nohup sh single1.sh ,现在JAVA 没运行完,就修改了数据库的状态,操作系统是AIX 的
现在大多数提到的方法就是 写个不断检测的JAVA 是否运行完的程序,还有更简单的方法吗

调用java的时候不要挂在后台执行就可以了, 如果说你的java程序名叫 Test.class 或者 Test.jar

shell脚本里调用JAVA程序
#!/bin/sh
java Test.class ##或者java -jar Test.jar
stat=`sqlplus .......`
if [ $stat = "**"]
then
nohup sh single1.sh
fi

shell里的命令也是按顺序执行的,java调用没返回的时候是不会继续往下执行的
如果你调用java程序的时候,命令后面带了个 & 符,则这条命令是在后台执行的,shell会继续执行下一条命令
参考技术A 在你的shell中添加一条检查java程序运行状态的不就好了么,也不对程序整体结构造成多大的破坏。
看你脚本的设置,应该是一个demon进程,本身不就是一个不断检查状态的过程么追问

详细点,怎么添加

以上是关于shell调用mapreduce结束后无法获取结束状态的主要内容,如果未能解决你的问题,请参考以下文章

python 调用系统命令 获取结束状态

shell脚本中调用JAVA 程序,如何让JAVA运行结束后,再执行下面命令(只有java运行完,下面对数据的处理才有用)

Qt QProcess startDetached 无法结束进程(bash 会话)

远程(jenkins)调用shell 不能正常结束

动画结束后无法激活 View Touch 事件

UIWebView 视频播放获取开始播放和结束播放通知