java获取Linux持续运行时间及友好显示
一、uptime命令
uptime命令可以查看系统的运行时间和负载
终端输入uptime 04:03:58 up 10 days, 13:19, 1 user, load average: 0.54, 0.40, 0.20
- 当前时间 04:03:58
- 系统已运行的时间 10 days, 13:19
- 当前在线用户 1 user
- 平均负载:0.54, 0.40, 0.20,最近1分钟、5分钟、15分钟系统的负载
显然这样查出的数据是不能展示给用户来看的,下面上更友好的显示运行时间的代码
二、UptimeUtil
package com.starfast.web.util; import java.io.InputStreamReader;
import java.io.LineNumberReader; /**
* 获取设备运行时间
*
* @author DUCHONG
* @since 2018-06-28 14:28
**/
public class UptimeUtil { /**
* 获取linux命令执行的结果,cat 之类
* @param cmd
* @return
*/
public static String getCmdResult(String cmd) { String result = "";
try { Process process = Runtime.getRuntime().exec(cmd);
InputStreamReader ir = new InputStreamReader(process.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
String line;
while ((line = input.readLine()) != null){
result=line;
} }
catch (java.io.IOException e) { System.err.println("IOException " + e.getMessage()); }
return result;
} /**
* 返回运行时间的秒
* @return
*/
public static String getUptimeSecond(String str){ String time=null;
if(str.contains(",")){
String [] strArr=str.split(","); if(strArr.length>2){
int hms=0;
int days=0; if(str.contains("days")){ //截取到天
String day=strArr[0].substring(strArr[0].indexOf("up")+2,strArr[0].indexOf("days")).trim();
//天的秒数
days=Integer.parseInt(day) * 24 * 3600;
//时分秒的秒数
hms=Integer.parseInt(getHms(strArr[1].replace("min","").trim()));
}
else if(str.contains("day")){
//截取到天
String day=strArr[0].substring(strArr[0].indexOf("up")+2,strArr[0].indexOf("day")).trim();
//天的秒数
days=Integer.parseInt(day) * 24 * 3600;
//时分秒的秒数
hms=Integer.parseInt(getHms(strArr[1].replace("min","").trim()));
}
else{ String hmsStr=strArr[0].substring(strArr[0].indexOf("up")+2);
hms=Integer.parseInt(getHms(hmsStr.replace("min","").trim()));
} Integer totalTime=days+hms;
time=totalTime.toString();
}
}
return time;
} /**
* 获取中间字段的秒数
* @param str
* @return
*/
public static String getHms(String str){ String result=null;
Integer hms=0;
if(str.contains(":")){ String [] hmsArr=str.split("\\:"); int length=hmsArr.length; switch (length){
//只有秒
case 1:hms+=Integer.parseInt(hmsArr[0]);
break;
//时分
case 2:hms+=(Integer.parseInt(hmsArr[0]) * 3600 + Integer.parseInt(hmsArr[1]) *60);
break;
//时分秒
case 3:hms+=(Integer.parseInt(hmsArr[0]) * 3600 + Integer.parseInt(hmsArr[1]) *60 +Integer.parseInt(hmsArr[2]));
break;
}
}
else{
//不包含: 只能是分
hms+=Integer.parseInt(str) * 60;
}
if(hms>0){
result=hms.toString();
}
return result;
}
/**
* 获取运行时间
* @return
*/
public static String getRouterUptime(){
return getUptimeSecond(getCmdResult("uptime"));
} public static void main(String[] args) { String s1="14:08:51 up 3 days, 1:04, 2 users, load average: 0.00, 0.00, 0.00";
String s5=" 18:09:13 up 1 day, 1:43, 4 users, load average: 0.51, 0.48, 0.31";
String s2="14:13:34 up 5:06, 4 users, load average: 0.00, 0.01, 0.05";
String s3="16:41:19 up 8 min, 2 users, load average: 0.56, 0.39, 0.17";
String s4="18:03:32 up 1:30, 3 users, load average: 0.06, 0.09, 0.11"; System.out.println(getUptimeSecond(s5));
}
}
三、cat /proc/uptime
/**
* 返回运行时间的秒-更精确
* @return
*/
public static String getUptimeSecond2(String str){
String result="0"; if(StringUtils.isNotEmpty(str)) {
if (str.contains(" ")) {
String[] re = str.split(" "); if (re.length > 0) {
String first = re[0];
if (first.contains(".")) {
result = first.substring(0, first.indexOf("."));
}
else {
result = first;
}
}
}
else{
if (str.contains(".")) {
result = str.substring(0, str.indexOf("."));
}
else {
result = str;
}
}
}
return result;
} /**
* 获取系统运行时间-更精确
* @return
*/
public static String getRouterUptime2(){
return getUptimeSecond2(getCmdResult("cat /proc/uptime"));
}
java获取Linux持续运行时间及友好显示的更多相关文章
- Java 获取Linux 的IP地址
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...
- Java获取Linux和Window系统CPU、内存和磁盘总使用率的情况
这是一个工具类,获取的内容: CPU使用率:得到的是当前CPU的使用情况,这是算出的是两次500毫秒时间差的CPU使用率 内存使用率:[1 - 剩余的物理内存/(总的物理内存+虚拟内存) ] * 1 ...
- Java获取Linux系统cpu使用率
原文:http://www.open-open.com/code/view/1426152165201 import java.io.BufferedReader; import java.io.Fi ...
- Java获取Linux上指定文件夹下所有第一级子文件夹
说明:需要只获得第一级文件夹目录 package com.sunsheen.jfids.studio.monitor.utils; import java.io.BufferedReader; imp ...
- Java:java获取Linux下的路径
指定Linux的路径 //Linux系统路径 StringBuilder sb = new StringBuilder(File.separator); String Url = sb.append( ...
- 获取Linux系统运行时间
uptime |sed 's/^.*up//' |sed 's/users.*//g'|awk '{for(i=1;i<NF;++i) printf $i "\t";prin ...
- 方法:Linux 下用JAVA获取CPU、内存、磁盘的系统资源信息
CPU使用率: InputStream is = null; InputStreamReader isr = null; BufferedReader brStat = null; StringTok ...
- linux下的shell命令的编写,以及java怎样调用linux的shell命令(java怎样获取linux上的网卡的ip信息)
程序猿都非常懒,你懂的! 近期在开发中,须要用到server的ip和mac信息.可是server是架设在linux系统上的,对于多网口,在获取ip时就产生了非常大的问题.以下是在windows系统上, ...
- JAVA如何利用Swiger获取Linux系统电脑配置相关信息
最近开发java应用程序,涉及到获取Linux服务器相关配置的问题,特地网上搜寻了下,采用Swiger包可以直接获取,再次小结一下,以便于以后能方便使用,也便于其他童鞋们学习. 推荐大家参考链接:ht ...
随机推荐
- oracle创建存储过程中遇到的问题
create or replace PROCEDURE CLEAR AS tname varchar(200);BEGIN tname:='''immediate trace name flush_c ...
- Advanced SQL: Relational division in jOOQ
i Rate This Relational algebra has its treats. One of the most academic features is the ...
- HTML中可以连接资源的标签集合
1.<a>标签,href属性指示链接的目标,可以是HTML也可以是内部css样式.<a href="http://www.w3school.com.cn"> ...
- 《Effective C++》——条款08:别让异常逃离析构函数
考虑如下代码: class Widget{ public: ... ~Widget(){...}//假设这个可能吐出一个异常 }; void doSomething() { std::vector&l ...
- Hadoop单机模式和伪分布式搭建教程CentOS
1. 安装JAVA环境 2. Hadoop下载地址: http://archive.apache.org/dist/hadoop/core/ tar -zxvf hadoop-2.6.0.tar.gz ...
- WinForm判断程序是否已经在运行,且只允许运行一个实例
我们开发WinFrom程序,很多时候都希望程序只有一个实例在运行,避免运行多个同样的程序,一是没有意义,二是容易出错. 为了更便于使用,笔者整理了一段自己用的代码,可以判断程序是否在运行,只运行一个实 ...
- DataGridView绑定数据源的几种方式
使用DataGridView控件,可以显示和编辑来自多种不同类型的数据源的表格数据. 将数据绑定到DataGridView控件非常简单和直观,在大多数情况下,只需设置DataSource属性即可.在绑 ...
- ASP.NET MVC架构模式
一.是什么? MVC,即(Model-View-Controller,模型—视图—控制器模式),和三层类似,用于表示一种软件架构模式.在这种模式下,将系统的实现分为模型Model,视图View,控制器 ...
- UVALive 3708 Graveyard(思维题)
将原有的每个雕塑的坐标位置,映射在一个总长为n+m的数轴上,设第一个点的坐标为0,(新的等分点必然有至少有一个和原来n等分的等分点重合,因为等分点可以等距的绕圆周旋转,总可以转到有至少一个重合的,不妨 ...
- NOI模拟赛 #4
好像只有一个串串题可以做... 不会 dp 和数据结构啊 QAQ 10 + 20 + 100 = 130 T1 一棵树,每个点有一个能量的最大容量 $l_i$ 和一个增长速度 $v_i$,每次可以选一 ...