查看Windows中服務的狀態[Daily works with Ruby]

來源:互聯網
上載者:User

起因:

我時常需要查看一些Windows Service的狀態,每次使用控制台->服務這種方式來查看服務狀態不僅浪費時間而且也很無聊,乾脆寫個Ruby指令碼吧。讓Ruby指令碼來通知我某個Windows Service的狀態是如何,並根據狀態給我一些提示。

 

主要內容:

你可以從本篇daily works with ruby中看到以下技術/工具的使用。

  • 使用RubyGems來查詢,安裝Gem包。
  • Ruby中查詢Windows服務狀態。
  • Ruby中調用Windows API。

 

一,安裝 RubyGems

1,你可以去RubyForge下載最新的RubyGems。RubyGems是Ruby中使用的一種包管理中工具。當你安裝完RubyGems後,便可以使用gem命令來查詢安裝別的Ruby庫。下載完RubyGems安裝包的zip檔案解壓至:D:\Temp目錄下,執行如下命令,安裝RubyGems:

C:\Documents and Settings\Jerry>d:D:\>cd Temp\rubygems-1.3.1D:\Temp\rubygems-1.3.1>setup.rbmkdir -p C:/Ruby/lib/ruby/site_ruby/1.8mkdir -p C:/Ruby/bin

安裝完成後便可以使用RubyGems來查詢和安裝Ruby的gem包了。

 

二,安裝win32-service包

1,查詢

安裝RubyGems包管理器後,我們可以用gem命令來查詢和安裝ruby的gem包。我們訪問Windows服務時,需要用到wind32-service包,現在我們在命令列了鍵入以下命令進行查詢:

 

1 D:\Temp\rubygems-1.3.1>gem query -r -n service



3 *** REMOTE GEMS ***



5 actionservice (0.3.0)

6 actionwebservice (1.2.6)

7 ar_mailer_service (0.1.1)

8 contxtlservice (0.1.1)

9 dot_net_services (0.4.0, 0.3.0)

10 mongrel_service (0.3.4, 0.1)

11 ruby_service_helper (0.1.0)

12 servicemerchant (0.1.0)

13 win32-service (0.7.0)

14 win32_service_manager (0.1.3)

15 

16 D:\Temp\rubygems-1.3.1>

gem query命令是查詢可用gem包的命令,你可以通過gem --help來得到更多的可用選項。

其中gem query -r -n service表示去遠端伺服器[-r選項]上尋找名稱[-n選項]為service的gem包。

在上面的13行中顯示了我們需要用到的包,即:win32-service。

 

2,安裝win32-service

執行如下命令安裝win32-service包:

1 D:\Temp\rubygems-1.3.1>gem install -r win32-service

2 Successfully installed win32-service-0.7.0-x86-mswin32-60

3 1 gem installed

4 Installing ri documentation for win32-service-0.7.0-x86-mswin32-60

5 Installing RDoc documentation for win32-service-0.7.0-x86-mswin32-60



7 D:\Temp\rubygems-1.3.1>

  在安裝完win32-service之後,我們便可以查看win32-service的相關文檔及API說明了。

先從命令列執行:

1 D:\Soft\AutoHotkey104805>gem server

2 Starting gem server on http://localhost:8808/

 

之後我們就可以開啟瀏覽器訪問http://localhost:8808/,便可以訪問所有的Gem包的Documents。

 

三,編寫查詢Windows Service狀態指令碼

萬事俱備,只欠東風了。我們開始編寫指令碼。

#!/ruby/binrequire "win32/service"require "Win32API"include Win32if  Service.exists?("WebClient") && Service.status("WebClient").current_state  == "running"    beep = Win32API.new('kernel32','Beep',['I']*2,'V')    5.times do        beep.call(750,300)        sleep(1)    endend

這裡需要解釋一下的是第7行:    beep = Win32API.new('kernel32','Beep',['I']*2,'V')

這裡我們申明了一個Windows API,其中Win32API.new方法有四個參數。

1,API所在動態連結程式庫的名稱,如user32,kernel32....

2,API的方法名稱。

3,傳入參數類型:兩個Integer類型的參數,常用的還有['P']-Pointer,['V']-void,['n']-number.

4,傳回值類型。

 

四,結語

利用RubyGems來查詢Ruby的庫很方便。 同樣地利用Ruby的一些模組,來調用Windows API完成特定任務也很簡單。

當遇到一些API不瞭解時,可以利用"gem server"命令開啟本地www服務查看相應Gem文檔。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.