Java执行linux命令

今天使用java调用linux命令出现了bug,有开始执行命令的日志打印,但是没有后续的执行结果打印,也没有错误日志出现。结果验证后发现命令还是没有执行成功,于是开始排查问题。以下是java代码:

System.out.println("got cmd job : " + cmd);
        try {
//            String[] cmds = new String[] {
//                    "/bin/sh",
//                    "-c",
//                    cmd };
            Process process = Runtime.getRuntime().exec(cmd);
            InputStream in ;
            BufferedReader br;
            in = process.getInputStream();
            br = new BufferedReader(new InputStreamReader(in));
            while (in.read() != -1) {
                result = br.readLine();
                log.info("job result [" + result + "]");
            }
            br.close();
            in.close();
            //process.waitFor();
            process.destroy();
        } catch (Throwable e) {
            log.error("执行linux命令出错:" + e.getMessage());
            e.printStackTrace();
        }

首先这段代码在测试环境中可以正常执行,也有执行结果的日志打印,由此可以排除掉是代码的问题。然后验证是否是linux命令写错,将命令放在Linux上运行,成功,排除是命令的问题。

考虑到使用java执行linux命令是单个事务执行,无法一步一步地执行命令,虽然这里使用了命令链接符&&,但为了避免这个问题,编写一个简单shell脚本,然后使用java执行。
以下是脚本:

#!/bin/sh
cd /root/git/mall.masadora.admin/dest
git pull
rm -rf /usr/server/java/tomcat_self_mall/webapps/ROOT/WEB-INF/dest
cp -rf /root/git/mall.masadora.admin/dest /usr/server/java/tomcat_self_mall/webapps/ROOT/WEB-INF

问题依然存在,结果还是和开始一样,回到最初。先考虑为什么没有错误日志打印,在代码中已经使用trycatch进行捕捉了,怀疑是java系统error异常,将 catch中的Exception改为Throwable,仍然没有发现错误日志打印。

没有办法了只能一行代码一行代码进行排查,第一步执行linux命令是java系统类runtime提供的方法,这个没什么好说的不会出问题。然后第二行,这里有一个Process类是执行linux命令后的结果,然后发现它内部除了有getInputStream方法外,还有一个getErrorStream方法,就是它了,修改代码,将errorStream中的内容打印出来,发现错误日志是git:command not found,由此可知是java执行shell脚本时没有获取到执行git命令的权限,在shell脚本上添加这些代码

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/git/bin:/usr/local/sbin:~/bin
export PATH
export LANG=en_US.UTF-8

执行成功。

总结:这次bug只是一个非常简单的问题,但是没有根据异常一步步回溯,而是靠猜测去各种尝试,这样做即浪费了时间,也无法在解决问题后了解整个bug的出现过程和原因,以后要避免这样

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 10,023评论 0 5
  • 本来想过江,结果改变方向。 真心不知道这样的吃吃喝喝有什么好。 我喜欢自己的圈子。 但是,我为什么要来呢? 说到底...
    哆啦__阅读 3,798评论 0 0
  • 现如今,玩小叶紫檀手串的朋友们越来越多,刚开始大家都会试水玩玩入门级的小叶紫檀,随着品味慢慢变高,便想要追求品质更...
    林远腾博客阅读 3,106评论 0 0
  • 现在科学技术对机器人的研究,取得一些成果。虽然我们经常在一些科幻电影里看到机器人取代人类成为这个世界新的统治...
    sophieme阅读 7,954评论 0 0

友情链接更多精彩内容