使用Monit监控ruby进程

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

我通常只用ruby script-name.rb来启动命令

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

更新:我尝试按照此方法创建一个包装脚本 ,然后启动ruby进程但它似乎没有创建.pid文件并输入’./wrapper-script stop’什么也没做:/

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

Monit Wiki有很多配置示例:

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

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

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

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

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

您不需要编写包装器脚本或尝试任何类型的黑魔法,只需使用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通过使用此文件来监视进程。

修改文件:

 /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 ) 

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

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

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

干杯

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

作为替代(monit),请看看bluepill 。

(肯定是出于主题但是)因为它是关于ruby的,你为什么不使用: http : //god.rubyforge.org/ ?

将此行添加到ruby脚本yourapp.rb,该脚本将创建名为yourapp.pidpid文件

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

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

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

    Interesting Posts