2014-05-16 26 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; 
};