写一段java程序来执行linux命令
摘要
在日常开发中,程序员需要经常查询服务器日志来排查问题和调试程序。如果是本地调试还好,但项目一旦发布到服务器上,每次查日志就很麻烦,而且日志量巨大,有时我们无法找到我们需要的信息。经常需要借助第三方工具来执行此类操作。那么我们可不可以在编辑器上运行代码就能完成相应的操作呢?
答案是肯定的!经过研究与测试,我总结了以下的方法,调用次服务就能执行相应的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命令的更多相关文章
- java程序猿常用Linux命令
		1.查找文件 find / -name filename.txt 根据名称查找/目录下的filename.txt文件. find . -name "*.xml" 递归查找所有的xm ... 
- 如何在java程序中调用linux命令或者shell脚本
		转自:http://blog.sina.com.cn/s/blog_6433391301019bpn.html 在java程序中如何调用linux的命令?如何调用shell脚本呢? 这里不得不提到ja ... 
- Java代码中执行Linux命令,亲测可用
		前提需要知道怎么在linux怎么新建java文件和怎么编译,否则请先学其他知识!! import java.io.*;public class Test{ public static void mai ... 
- android 应用程序中执行Linux 命令
		ADB 无线调试命令son = "setprop service.adb.tcp.port 5555\n" + "stop adbd\n" + "st ... 
- java程序中调用Linux命令Windows命令
		目前总结的方法: 调用Linux简单的命令行,设置文件夹权限755 String scriptDir = "/home/wenf"; String cmd = "chmo ... 
- java servlet中执行linux命令
		public HttpServletResponse execCmd(String cmd, HttpServletRequest request, HttpServletResponse respo ... 
- 在Python程序中执行linux命令
		import commands print commands.getstatusoutput('ls') 输出: (0, '1.py\nwork.nfs') 参考文档: https://blog.cs ... 
- Java程序执行Linux命令
		Java程序中要执行linux命令主要依赖2个类:Process和Runtime 首先看一下Process类: ProcessBuilder.start() 和 Runtime.exec 方法创建一个 ... 
- Java程序执行Linux命令(JSP运行其他程序)
		java程序中要执行linux命令主要依赖2个类:Process和Runtime 首先看一下Process类: ProcessBuilder.start() 和 Runtime.exec 方法创建一个 ... 
随机推荐
- POJ1321——棋盘问题
			http://poj.org/problem?id=1321 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解 ... 
- 使用fiddler抓包模拟器及配置fiddler过滤
			一. 安装fiddler https://www.telerik.com/fiddler 二. 配置fiddler,一下的ip要根据自己电脑情况设置 然后重启Fiddler,一定要重启!!! 三.配置 ... 
- Jmeter扩展组件开发(8) - 函数助手扩展开发demo
			前提条件 1.pom文件引用ApacheJMeter_functions包 <dependency> <groupId>org.apache.jmeter</groupI ... 
- php 扫描url死链接
			* 从Packagist上搜索需要的包 https://packagist.org/ * 通过composer下载依赖包 composer require guzzlehttp/guzzle comp ... 
- 12306抢票算法居然被曝光了!!!居然是redis实现的
			导读 相信大家应该都有抢火车票的经验,每年年底,这都是一场盛宴.然而你有没有想过抢火车票这个算法是怎么实现的呢? 应该没有吧,咱们今天就来一一探讨.其实并没有你想的那么难 bitmap与位运算 red ... 
- 吴恩达-神经网络-week1-hw3
			Ref:https://blog.csdn.net/u013733326/article/details/79702148 点击查看代码 from testCases import * from pl ... 
- android 使用SQLite的基本操作
			Android操作数据库SQLite使用sql语句基本操作 1:自定义自己的SQLiteOpenHelper public class DBHelper extends SQLiteOpenHelpe ... 
- Python读取网页表格数据
			学会了从网格爬取数据,就可以告别从网站一页一页复制表格数据的时代了. 说个亲身经历的事: 以前我的本科毕业论文是关于"燃放烟花爆竹和空气质量"之间关系的,就要从环保局官网查资料. ... 
- 生成base64图片验证码
			github.com/mojocn/base64Captcha func GetCaptcha(c *gin.Context){ driver := base64Captcha.NewDriverDi ... 
- Django实现用户登录注册
			本文将会介绍小白如何完成一个用户登录注册系统 新建一个Django项目,名字为login_register,并且使用命令manage.py startapp.User(名字自己随便起) 最终djang ... 
