使用Monit监控ruby进程

时间:2011-01-10 20:59:28

标签: ruby monitoring monit

我有一堆长期运行的Ruby脚本,我想确保每隔30秒左右就会出现这些脚本。

我通常只需ruby script-name.rb

启动命令

如何配置monit来管理这些脚本?

更新:我试图关注this method to create a wrapper script然后启动ruby进程,但它似乎没有创建.pid文件并输入'./wrapper-script stop'什么都没有:/

我应该在ruby中编写pid还是使用包装器脚本来创建monit所需的pid?

7 个答案:

答案 0 :(得分:6)

Monit Wiki有很多配置示例:

http://mmonit.com/wiki/Monit/ConfigurationExamples

选择一个简单的并根据您的需要进行修改。

更新:包装器脚本应在此行中为您创建pid:

echo $$ > /var/run/xyz.pid;

您是否根据需要调整了脚本?它是可执行的(chmod +x)吗?它是否具有目标的写权限?也许发布你想要使用的包装器,这样我就可以为你提供更多帮助。

答案 1 :(得分:4)

您不需要编写包装脚本或尝试任何类型的黑魔法,只需使用Daemons库即可。

想象一下,你有一个类Worker,它有一个方法“run”,从套接字或类似的东西进入无限循环读取,这就是你编写Daemons包装器的方法:

# this is file my_worker_control.rb
require 'rubygems'
require 'daemons'
require 'worker'

Daemons.run_proc(:app_name => 'my_worker', :dir_mode => :system, :log_output => true ) do
  Worker.run
end

脚本完成后,只需从命令行或init.d脚本中调用它:

my_worker_control.rb run | start | stop | restart

此配置将在“/ var / run”下生成“my_worker.pid”文件,您可以使用monit通过使用此文件来监视该进程。

答案 2 :(得分:1)

修改文件:

/etc/init.d/skeleton 

您需要稍微修改它,然后:

chmod +x /etc/init.d/process_name 
sudo update-rc.d process_name defaults
sudo /etc/init.d/process_name (start| stop| reload ) 

现在只需使用带有pid的Monit和/var/run/process.pid

开始位置: sudo /etc/init.d/process start

停止位置: sudo /etc/init.d/process stop

干杯

答案 3 :(得分:0)

在ruby脚本中编写pid文件对您来说可能是最简单的(只需打开一个文件并在其中写入$$)。也就是说,包装脚本方法应该可以正常工作。您的脚本是否有权写入/var/run中的文件(或者您将pid文件放在何处)?

答案 4 :(得分:0)

作为替代(监控),请查看bluepill

答案 5 :(得分:0)

(当然不是主题但是)因为它是关于红宝石,你为什么不使用:http://god.rubyforge.org/

答案 6 :(得分:0)

将此行添加到您的ruby脚本yourapp.rb,该脚本会创建名为pid

yourapp.pid文件

File.open('/somepath/yourapp.pid', 'w') {|f| f.write Process.pid }

配置Monit以检查/etc/monit/conf.d/yourapp中的pid

使用pidfile /somepath/yourapp.pid检查进程yourapp