Runtime.getRuntime() 排查问题过程

今天遇到一个需求 想用一个j2ee的web程序给linux发命令,  简单来说就是 运行run.sh。 然后死活调用不通,各种问题,下面是排查和解决的方案

需要注意几点
1Process ps = Runtime.getRuntime().exec(cmd);
LOG.info(ps.waitFor());

2ps.getInputStream() 这是输入 正确的信息

3ps.getErrorStream() 这是输出错误信息

4执行sh命令是,必须runCMD(new String[]{"sh","-c",cmd[i]});
sh -c   xxx命令

排查问题过程
1先怀疑hup掉了。。查询了几个后端执行命令,链接如下
http://www.ibm.com/developerworks/cn/linux/l-cn-nohup/
未解决

2查询ps.waitFor(),返回值为非0,判断程序不能正确返回,但是找不出为什么。。

3找出ps.getErrorStream() 错误输出。。,发现是run.sh脚本里面,缺少环境变量

4解决环境变量后,发现任务已经在后端运行了,但是貌似卡在进程里了。。
查看tomcat日志 j2ee程序已经调用linux命名,ps -ef |grep run.sh也能看到。。
还是未解决。。

5最后询问有经验的人,,才知道,,sh -c   需要-c参数。。。。 坑爹呀。

 

你可能感兴趣的:(Runtime)