如何確定伺服器的正常執行時間?

2021-08-25 02:06:39 字數 3202 閱讀 2614

問:

您好,指令碼專家! 如何確定伺服器的正常執行時間?

-- lf 答:

您好,lf。 這個問題很簡單。 畢竟,我們假設您談論的是 windows 伺服器,而 windows 伺服器是永遠不停機的,對嗎? 因此,正常執行時間肯定是無限長的。 問題得到了解決。

那麼,我們假設 windows 伺服器會停機(可能是因為某個非 windows 使用者偷偷潛入並將電源插頭或其他什麼東西拔掉了)。 如果您想知道執行 windows xp 或 windows server 2003 的計算機的系統正常執行時間,可使用以下指令碼:

strcomputer = "."

set objwmiservice = getobject("winmgmts:\\" & strcomputer & "\root\cimv2")

set coloperatingsystems = objwmiservice.execquery _

("select * from win32_perfformatteddata_perfos_system")

for each objos in coloperatingsystems

intsystemuptime = int(objos.systemuptime / 60)

wscript.echo intsystemuptime & " minutes"

next

正如您所看到的,我們連線至 wmi 服務,然後使用execquery方法來檢索win32_perfformatteddata_perfos_system類中的所有例項。 (順便提一下,這解釋了該指令碼只能在 windows xp 或 windows server 2003 上執行的原因: 只有 windows 的這兩個版本中含有 win32_perfformatteddata_perfos_system 類。)

win32_perfformatteddata_perfos_system 包含許多與作業系統相關的效能計數器,其中包括systemuptime,其可指示您機器已經執行了多長時間(以秒計)。 我們使用下面這行**來獲取 systemuptime 的值,並將其除以 60(這樣顯示的正常執行時間的單位為分鐘,而不是秒),然後再將其轉換為整數,除去小數點後的所有數字:

intsystemuptime = int(objos.systemuptime / 60)
是的,那正是一小行**所要做的,簡直太多了,不是嗎? 然後我們回顯變數 intsystemuptime 的值就可以了。

好了,除非您執行的是 windows 2000,否則問題就解決了。 正如前面所述,上述指令碼不能在 windows 2000 上執行,windows 2000 甚至從沒聽說過 win32_perfformatteddata_perfos_system 類。 幸運的是,存在一種解決方法;雖然有些笨拙,但畢竟也是一種解決方法:

strcomputer = "."

set objwmiservice = getobject("winmgmts:\\" & strcomputer & "\root\cimv2")

set coloperatingsystems = objwmiservice.execquery _

("select * from win32_operatingsystem")

for each objos in coloperatingsystems

dtmbootup = objos.lastbootuptime

dtmlastbootuptime = wmidatestringtodate(dtmbootup)

dtmsystemuptime = datediff("n", dtmlastbootuptime, now)

wscript.echo dtmsystemuptime & " minutes"

next

function wmidatestringtodate(dtmbootup)

wmidatestringtodate = cdate(mid(dtmbootup, 5, 2) & "/" & _

mid(dtmbootup, 7, 2) & "/" & left(dtmbootup, 4) _

& " " & mid (dtmbootup, 9, 2) & ":" & _

mid(dtmbootup, 11, 2) & ":" & mid(dtmbootup,13, 2))

end function

在此指令碼中,我們連線至 wmi 服務,然後查詢win32_operatingsystem類;那是因為 win32_operatingsystem 中包含乙個屬性 – lastbootuptime – 該屬性可告訴您計算機上次啟動的時間。 這一點非常有用: 如果我們從當前時間中減去 lastbootuptime,我們就會知道 – 沒錯 – 計算機已經執行了多長時間。

唯一棘手的部分是,與所有 wmi 日期和時間一樣,lastbootuptime 是以 utc(通用時間座標)格式儲存的。 那就意味著將返回下面這樣的值:

20050726071152.500000-420
在進行嘗試之前,請不要費神從當前日期和時間中減去該值;那樣做是徒勞的。 我們需要將該值轉換成看起來更像實際日期和時間的形式;這正是我們之所以呼叫乙個由我們編寫的函式的原因,該函式可將 utc datetime 值轉換成常規的老式日期/時間值:

dtmlastbootuptime = wmidatestringtodate(dtmbootup)
注意。 我們將不對該函式的工作方式進行介紹。 如果您對此感興趣,請參閱 microsoft windows 2000 scripting guide(英文)中的此部分

dtmsystemuptime = datediff("n", dtmlastbootuptime, now)
正如您所看到的,我們將三個引數傳遞給 datediff:

「n」,表示以分鐘為單位報告時間差。

dtmlastbootuptime,用來儲存轉換後的 datetime 值的變數。

now,當前日期和時間。

我們接下來要做的就是以分鐘為單位回顯系統正常執行時間。

正如前面所述,我們無法想象您為何需要對 windows 計算機使用這樣乙個指令碼,而只是以防萬一…。

Windows服務執行時間常用設定

1 用timer控制每隔多長時間執行一次 windows服務使用timer控制項並不是在工具箱上拖拽過來的,而是system.windows.forms命名空間下的元件,即使用的timer應該是system.timers.timer.解決方法 方法一 開啟 工具箱 右鍵 選擇項 篩選器輸入syste...

java如何記錄方法執行時間?

當我們寫完一些東西的時候,執行有可能很慢卻不知道 出現了問題,這時候我們就需要在 中新增適當的測試 以便於我們找到原因並解決!這個 是測試 嗎,不需要匯入包。在你需要測試的 方法第一行加上 long a system.currenttimemillis 在最後的一行加上 system.out.pri...

如何在執行時確定物件型別(RTTI)

如何在執行時確定物件型別 rtti rtti 是 runtime type information 的縮寫,意思是 執行時型別資訊。它提供了執行時確定物件型別的方法。本文將簡略介紹 rtti 的一些背景知識 描述 rtti 的概念,並通過具體例子和 介紹什麼時候使用以及如何使用 rtti 本文還將詳...