2014-05-16 25 views
2

我想在Windows上遠程監視ruby腳本進程。我知道如何在基於unix的系統上使用上帝或類似的監視框架來實現它,但問題是我想要將它用於Windows。窗口上的Ruby腳本進程監視

基本上,我想要做的幾件事情:

  • 監控腳本是否正在運行
  • 如果腳本停止,應重新啓動
  • 發送腳本的狀態到遠程服務器(這並不重要,我可以自己寫這個選項)

也許有人可以建議它。

請注意,我寧願用ruby編寫監控解決方案,所以我可以進一步擴展它。

+0

你看着的子進程的寶石?它適用於Windows。 https://github.com/jarib/childprocess – Threeve

+0

@Threeve我會檢查出來,讓你知道它是否工作。我已經讀過bluepill在Windows上運行的地方,但必須先測試它。 – Maxo

回答

2

我在論壇www.ruby-forum.com上發現了這個問題,並對它進行了調整,您可以看到過程(腳本)是否仍然運行。重新啓動和報告你可以處理我自己,我假設?

require 'WIN32OLE' 

procs = WIN32OLE.connect("winmgmts:\\\\.") 
procs.InstancesOf("win32_process").each do |p| 
    puts p.commandline if p.name == 'ruby.exe' 
end 

這裏可用的屬性

class Win32_Process : CIM_Process 
{ 
    string Caption; 
    string CommandLine; 
    string CreationClassName; 
    datetime CreationDate; 
    string CSCreationClassName; 
    string CSName; 
    string Description; 
    string ExecutablePath; 
    uint16 ExecutionState; 
    string Handle; 
    uint32 HandleCount; 
    datetime InstallDate; 
    uint64 KernelModeTime; 
    uint32 MaximumWorkingSetSize; 
    uint32 MinimumWorkingSetSize; 
    string Name; 
    string OSCreationClassName; 
    string OSName; 
    uint64 OtherOperationCount; 
    uint64 OtherTransferCount; 
    uint32 PageFaults; 
    uint32 PageFileUsage; 
    uint32 ParentProcessId; 
    uint32 PeakPageFileUsage; 
    uint64 PeakVirtualSize; 
    uint32 PeakWorkingSetSize; 
    uint32 Priority; 
    uint64 PrivatePageCount; 
    uint32 ProcessId; 
    uint32 QuotaNonPagedPoolUsage; 
    uint32 QuotaPagedPoolUsage; 
    uint32 QuotaPeakNonPagedPoolUsage; 
    uint32 QuotaPeakPagedPoolUsage; 
    uint64 ReadOperationCount; 
    uint64 ReadTransferCount; 
    uint32 SessionId; 
    string Status; 
    datetime TerminationDate; 
    uint32 ThreadCount; 
    uint64 UserModeTime; 
    uint64 VirtualSize; 
    string WindowsVersion; 
    uint64 WorkingSetSize; 
    uint64 WriteOperationCount; 
    uint64 WriteTransferCount; 
};