java擷取Linux持續已耗用時間及友好顯示

來源:互聯網
上載者:User

標籤:getc   highlight   except   格式   length   date   已運行   0.00   sub   

一、uptime命令

  uptime命令可以查看系統的已耗用時間和負載

終端輸入uptime04: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{                    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;    }/**     * 根據毫秒數計算時間間隔,格式:幾天幾小時幾分     *      * @param timeMillisBetweenTwoDate     * @return     */    public static String calculateInterval(long timeMillisBetweenTwoDate) {        if (timeMillisBetweenTwoDate == 0) {            return "0分鐘";        }        StringBuilder str = new StringBuilder();        long p = Math.abs(timeMillisBetweenTwoDate);        long day = p / (24 * 3600000);        if (day > 0) {            str.append(day).append("天");        }        p = p % (24 * 3600000);        long hour = p / (3600000);        if (hour > 0) {            str.append(hour).append("小時");        }        p = p % (3600000);        long minute = p / (60000);        if (minute > 0) {            str.append(minute).append("分鐘");        }        p = p % (60000);        long second = p / (1000);        if (second > 0) {            str.append(second).append("秒");        }        return str.toString();    }    /**     * linux 系統中擷取已耗用時間     * @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 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(calculateInterval(getUptimeSecond(s3) * 1000));    }}

 

java擷取Linux持續已耗用時間及友好顯示

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.