今天遇到一个需求 想用一个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参数。。。。 坑爹呀。
需要注意几点
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参数。。。。 坑爹呀。