摘要

在日常开发中,程序员需要经常查询服务器日志来排查问题和调试程序。如果是本地调试还好,但项目一旦发布到服务器上,每次查日志就很麻烦,而且日志量巨大,有时我们无法找到我们需要的信息。经常需要借助第三方工具来执行此类操作。那么我们可不可以在编辑器上运行代码就能完成相应的操作呢?

答案是肯定的!经过研究与测试,我总结了以下的方法,调用次服务就能执行相应的linux命令,无需麻烦借用第三方工具了,在同一个开发工具上就能完成所有的操作。接下来看看代码吧!

程序代码

一、写一个对外提供的services(ReadLogServlet)

public class ReadLogServletextends SlingAllMethodsServlet {

private static final LoggerLOG = LoggerFactory.getLogger(ReadLogServlet.class);

@Override

        protected void doPost(final SlingHttpServletRequest request,

final SlingHttpServletResponse response)throws ServletException, IOException {

request.setCharacterEncoding("UTF-8");

response.setContentType("application/json;charset=utf-8;");

String jsonStr = HttpRequestUtil.getRequestJson(request);

try {

JSONObject jsonObject =new JSONObject(jsonStr);

String commond = jsonObject.getString("command");

String result = executeLinuxCmd(commond);

if (result ==null) {

LOG.error("result null");

return;

}

try (PrintWriter printWriter = response.getWriter()) {

printWriter.write(result);

response.flushBuffer();

}catch (IOException e) {

LOG.error("Response writer error:" + e.toString());

}

}catch (JSONException e) {

}catch (IOException io){

try (PrintWriter printWriter = response.getWriter()) {

printWriter.write(io.getMessage());

response.flushBuffer();

}catch (IOException e) {

LOG.error("Response writer error:" + e.toString());

}

}

}

//核心代码

public String executeLinuxCmd(String cmd)throws IOException {

//System.out.println("got cmd job : " + cmd);

            Runtime run = Runtime.getRuntime();

//            Process process = run.exec(cmd);

            Process process = run.exec(new String[]{"/bin/sh","-c", cmd});

InputStream in = process.getInputStream();

BufferedReader bs =new BufferedReader(new InputStreamReader(in));

//List list = new ArrayList();

            StringBuffer sf =new StringBuffer();

String result =null;

while ((result = bs.readLine()) !=null) {

//System.out.println("job result [" + result + "]");

//list.add(result);

                sf.append(result);

sf.append("\n");

}

in.close();

// process.waitFor();

            process.destroy();

return sf.toString();

}

}

二、使用postman调用ReadLogServlet(使用其他工具调用也可)

总结:

  除了查询日志外,还可执行其他linux命令。大家可继续优化发掘,如果有更好的意见和技术,欢迎留言探讨哦!

写一段java程序来执行linux命令的更多相关文章

  1. java程序猿常用Linux命令

    1.查找文件 find / -name filename.txt 根据名称查找/目录下的filename.txt文件. find . -name "*.xml" 递归查找所有的xm ...

  2. 如何在java程序中调用linux命令或者shell脚本

    转自:http://blog.sina.com.cn/s/blog_6433391301019bpn.html 在java程序中如何调用linux的命令?如何调用shell脚本呢? 这里不得不提到ja ...

  3. Java代码中执行Linux命令,亲测可用

    前提需要知道怎么在linux怎么新建java文件和怎么编译,否则请先学其他知识!! import java.io.*;public class Test{ public static void mai ...

  4. android 应用程序中执行Linux 命令

    ADB 无线调试命令son = "setprop service.adb.tcp.port 5555\n" + "stop adbd\n" + "st ...

  5. java程序中调用Linux命令Windows命令

    目前总结的方法: 调用Linux简单的命令行,设置文件夹权限755 String scriptDir = "/home/wenf"; String cmd = "chmo ...

  6. java servlet中执行linux命令

    public HttpServletResponse execCmd(String cmd, HttpServletRequest request, HttpServletResponse respo ...

  7. 在Python程序中执行linux命令

    import commands print commands.getstatusoutput('ls') 输出: (0, '1.py\nwork.nfs') 参考文档: https://blog.cs ...

  8. Java程序执行Linux命令

    Java程序中要执行linux命令主要依赖2个类:Process和Runtime 首先看一下Process类: ProcessBuilder.start() 和 Runtime.exec 方法创建一个 ...

  9. Java程序执行Linux命令(JSP运行其他程序)

    java程序中要执行linux命令主要依赖2个类:Process和Runtime 首先看一下Process类: ProcessBuilder.start() 和 Runtime.exec 方法创建一个 ...

随机推荐

  1. Linux没有/var/log/messages日志文件

    1.新安装的CentOS8没有/var/log/messages日志文件: 安装rsyslog: dnf  install   -y  rsyslog 或 yum  install  -y  rsys ...

  2. 使用metaweblog API实现通用博客发布 之 版本控制

    使用metaweblog API实现通用博客发布 之 版本控制 接上一篇本地图片自动上传以及替换路径,继续解决使用API发布博客的版本控制问题. 当本地文档修订更新以后,如何发现版本更新,并自动发布到 ...

  3. 微信小程序生成小程序某一个页面的小程序码

    1 登录微信小程序后台,mp.weixin.qq.com 2 点击右上角工具->生成小程序码 3 填写小程序名称或appid 4 关键一步,下面页面填写用户微信号后,打开小程序到某一个页面,点击 ...

  4. GCN数据集Cora、Citeseer、Pubmed文件分析

    简介 本文将对Cora.Citeseer.Pubmed 数据集进行详细介绍 Cora.Citeseer.Pubmed 数据集 来源 图 节点 边 特征 标签(y) Cora "Collect ...

  5. centos7安装sonarqube与使用

    https://www.cnblogs.com/mascot1/p/11179767.html https://blog.csdn.net/superbfly/article/details/1039 ...

  6. 『GoLang』接口

    接口是什么 Go 语言不是一种 "传统" 的面向对象编程语言:它里面没有类和继承的概念. 但是 Go 语言里有非常灵活的 接口 概念,通过它可以实现很多面向对象的特性.接口提供了一 ...

  7. Loj#116-[模板]有源汇有上下界最大流

    正题 题目链接:https://loj.ac/p/116 题目大意 \(n\)个点\(m\)条边的一张图,每条边有流量上下限制,求源点到汇点的最大流. 解题思路 先别急着求上面那个,考虑一下怎么求无源 ...

  8. python-matplotlib学习(1)

    1 import matplotlib.pyplot as plt 2 import numpy as np 3 4 x=np.linspace(-1,1,50) 5 y=2*x+1 6 plt.pl ...

  9. 位运算符的用法 ----非(!),与(&),或(|),异或(^)

    位运算符的用法 ----非(!),与(&),或(|),异或(^) 三种运算符均针对二进制 非!:是一元运算符.对一个二进制的整数按位取反,输入0则输出1,输入1则输出0. 例: 0100 -( ...

  10. C语言实现简易计算器(可作加减乘除)

    C语言实现简易计算器(加减乘除) 计算器作为课设项目,已完成答辩,先将代码和思路(注释中)上传一篇博客 已增添.修改.整理至无错且可正常运行 虽使用了栈,但初学者可在初步了解栈和结构语法后理解代码 # ...