一、uptime命令

  uptime命令可以查看系统的运行时间和负载

  1. 终端输入uptime
  2.  
  3. 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

  1. package com.starfast.web.util;
  2.  
  3. import java.io.InputStreamReader;
  4. import java.io.LineNumberReader;
  5.  
  6. /**
  7. * 获取设备运行时间
  8. *
  9. * @author DUCHONG
  10. * @since 2018-06-28 14:28
  11. **/
  12. public class UptimeUtil {
  13.  
  14. /**
  15. * 获取linux命令执行的结果,cat 之类
  16. * @param cmd
  17. * @return
  18. */
  19. public static String getCmdResult(String cmd) {
  20.  
  21. String result = "";
  22. try {
  23.  
  24. Process process = Runtime.getRuntime().exec(cmd);
  25. InputStreamReader ir = new InputStreamReader(process.getInputStream());
  26. LineNumberReader input = new LineNumberReader(ir);
  27. String line;
  28. while ((line = input.readLine()) != null){
  29. result=line;
  30. }
  31.  
  32. }
  33. catch (java.io.IOException e) {
  34.  
  35. System.err.println("IOException " + e.getMessage());
  36.  
  37. }
  38. return result;
  39. }
  40.  
  41. /**
  42. * 返回运行时间的秒
  43. * @return
  44. */
  45. public static String getUptimeSecond(String str){
  46.  
  47. String time=null;
  48. if(str.contains(",")){
  49. String [] strArr=str.split(",");
  50.  
  51. if(strArr.length>2){
  52. int hms=0;
  53. int days=0;
  54.  
  55. if(str.contains("days")){
  56.  
  57. //截取到天
  58. String day=strArr[0].substring(strArr[0].indexOf("up")+2,strArr[0].indexOf("days")).trim();
  59. //天的秒数
  60. days=Integer.parseInt(day) * 24 * 3600;
  61. //时分秒的秒数
  62. hms=Integer.parseInt(getHms(strArr[1].replace("min","").trim()));
  63. }
  64. else if(str.contains("day")){
  65. //截取到天
  66. String day=strArr[0].substring(strArr[0].indexOf("up")+2,strArr[0].indexOf("day")).trim();
  67. //天的秒数
  68. days=Integer.parseInt(day) * 24 * 3600;
  69. //时分秒的秒数
  70. hms=Integer.parseInt(getHms(strArr[1].replace("min","").trim()));
  71. }
  72. else{
  73.  
  74. String hmsStr=strArr[0].substring(strArr[0].indexOf("up")+2);
  75. hms=Integer.parseInt(getHms(hmsStr.replace("min","").trim()));
  76. }
  77.  
  78. Integer totalTime=days+hms;
  79. time=totalTime.toString();
  80. }
  81. }
  82. return time;
  83. }
  84.  
  85. /**
  86. * 获取中间字段的秒数
  87. * @param str
  88. * @return
  89. */
  90. public static String getHms(String str){
  91.  
  92. String result=null;
  93. Integer hms=0;
  94. if(str.contains(":")){
  95.  
  96. String [] hmsArr=str.split("\\:");
  97.  
  98. int length=hmsArr.length;
  99.  
  100. switch (length){
  101. //只有秒
  102. case 1:hms+=Integer.parseInt(hmsArr[0]);
  103. break;
  104. //时分
  105. case 2:hms+=(Integer.parseInt(hmsArr[0]) * 3600 + Integer.parseInt(hmsArr[1]) *60);
  106. break;
  107. //时分秒
  108. case 3:hms+=(Integer.parseInt(hmsArr[0]) * 3600 + Integer.parseInt(hmsArr[1]) *60 +Integer.parseInt(hmsArr[2]));
  109. break;
  110. }
  111. }
  112. else{
  113. //不包含: 只能是分
  114. hms+=Integer.parseInt(str) * 60;
  115. }
  116. if(hms>0){
  117. result=hms.toString();
  118. }
  119. return result;
  120. }
  121. /**
  122. * 获取运行时间
  123. * @return
  124. */
  125. public static String getRouterUptime(){
  126. return getUptimeSecond(getCmdResult("uptime"));
  127. }
  128.  
  129. public static void main(String[] args) {
  130.  
  131. String s1="14:08:51 up 3 days, 1:04, 2 users, load average: 0.00, 0.00, 0.00";
  132. String s5=" 18:09:13 up 1 day, 1:43, 4 users, load average: 0.51, 0.48, 0.31";
  133. String s2="14:13:34 up 5:06, 4 users, load average: 0.00, 0.01, 0.05";
  134. String s3="16:41:19 up 8 min, 2 users, load average: 0.56, 0.39, 0.17";
  135. String s4="18:03:32 up 1:30, 3 users, load average: 0.06, 0.09, 0.11";
  136.  
  137. System.out.println(getUptimeSecond(s5));
  138. }
  139. }

三、cat  /proc/uptime

  1. /**
  2. * 返回运行时间的秒-更精确
  3. * @return
  4. */
  5. public static String getUptimeSecond2(String str){
  6. String result="0";
  7.  
  8. if(StringUtils.isNotEmpty(str)) {
  9. if (str.contains(" ")) {
  10. String[] re = str.split(" ");
  11.  
  12. if (re.length > 0) {
  13. String first = re[0];
  14. if (first.contains(".")) {
  15. result = first.substring(0, first.indexOf("."));
  16. }
  17. else {
  18. result = first;
  19. }
  20. }
  21. }
  22. else{
  23. if (str.contains(".")) {
  24. result = str.substring(0, str.indexOf("."));
  25. }
  26. else {
  27. result = str;
  28. }
  29. }
  30. }
  31. return result;
  32. }
  33.  
  34. /**
  35. * 获取系统运行时间-更精确
  36. * @return
  37. */
  38. public static String getRouterUptime2(){
  39. return getUptimeSecond2(getCmdResult("cat /proc/uptime"));
  40. }

  

java获取Linux持续运行时间及友好显示的更多相关文章

  1. Java 获取Linux 的IP地址

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...

  2. Java获取Linux和Window系统CPU、内存和磁盘总使用率的情况

    这是一个工具类,获取的内容: CPU使用率:得到的是当前CPU的使用情况,这是算出的是两次500毫秒时间差的CPU使用率 内存使用率:[1 -  剩余的物理内存/(总的物理内存+虚拟内存) ] * 1 ...

  3. Java获取Linux系统cpu使用率

    原文:http://www.open-open.com/code/view/1426152165201 import java.io.BufferedReader; import java.io.Fi ...

  4. Java获取Linux上指定文件夹下所有第一级子文件夹

    说明:需要只获得第一级文件夹目录 package com.sunsheen.jfids.studio.monitor.utils; import java.io.BufferedReader; imp ...

  5. Java:java获取Linux下的路径

    指定Linux的路径 //Linux系统路径 StringBuilder sb = new StringBuilder(File.separator); String Url = sb.append( ...

  6. 获取Linux系统运行时间

    uptime |sed 's/^.*up//' |sed 's/users.*//g'|awk '{for(i=1;i<NF;++i) printf $i "\t";prin ...

  7. 方法:Linux 下用JAVA获取CPU、内存、磁盘的系统资源信息

    CPU使用率: InputStream is = null; InputStreamReader isr = null; BufferedReader brStat = null; StringTok ...

  8. linux下的shell命令的编写,以及java怎样调用linux的shell命令(java怎样获取linux上的网卡的ip信息)

    程序猿都非常懒,你懂的! 近期在开发中,须要用到server的ip和mac信息.可是server是架设在linux系统上的,对于多网口,在获取ip时就产生了非常大的问题.以下是在windows系统上, ...

  9. JAVA如何利用Swiger获取Linux系统电脑配置相关信息

    最近开发java应用程序,涉及到获取Linux服务器相关配置的问题,特地网上搜寻了下,采用Swiger包可以直接获取,再次小结一下,以便于以后能方便使用,也便于其他童鞋们学习. 推荐大家参考链接:ht ...

随机推荐

  1. STL视频_00

    [05:40]比赛规则 - Part01[06:33]比赛规则 - Part02[07:28]比赛规则 - Part03[08:45]提出的问题 - 1和2[09:23]提出的问题 - 3和4 *** ...

  2. Launch an instance from a volume

    从image boot,并且attach一个no-bootable volume: $ nova boot --flavor --image -af91-43d8-b5e6-a4506aa8f369 ...

  3. python中常见的日期换算

    time模块提供各种操作时间的函数  说明:一般有两种表示时间的方式:       第一种是时间戳的方式(相对于1970.1.1 00:00:00以秒计算的偏移量),时间戳是惟一的       第二种 ...

  4. MDX中Filter 与Exist的区别

        获得一个集合,这个一般用来筛选出一个自定义的set,比如在中国的餐厅 该set返回所有MSDNteam下并且在Fact Thread度量上有记录的products 用Exists实现 sele ...

  5. SSIS的控制流之Foreach循环容器和序列容器

    上一篇介绍了For循环容器的使用.本篇将介绍Foreach循环容器和序列容器的使用. Foreach循环容器 Foreach循环容器定义包中的控制流.其循环的实现类似于编程语言中的Foreach循环结 ...

  6. java:RandomAccessFile随机读取文件内容

    RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须是可知的.但是该类仅限于操作文件. ...

  7. C++(十一)— map的插入、查找、删除

    标准库map类型是一种以键-值(key-value)存储的数据类型. map是STL的一个关联容器.它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值 ...

  8. 用createinstallmedia创建可恢复的OSX安装DMG

    准备 从App Store下载OS X安装程序,下载完成,会在应用程序目录 /Applications 下找到类似 Install OS X 10.xxxxxx.app(中文名如:安装 OS X 10 ...

  9. count(*) 和count(1) 有区别吗

    create table test1 (a varchar2(2),b varchar2(2)); insert into test1 values ('b','c'); insert into te ...

  10. 常用服务搭建(nfs/ftp/samba)

    一. NFS1. NFS简介NFS全称是network file systemNFS允许一个系统在网络上与他人共享目录和文件.通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件. 假 ...