我有一堆长时间运行的Ruby脚本,我想确保它们每隔30秒就能正常工作。
我通常通过简单的ruby script-name.rb
命令来启动这些脚本。
我该如何配置monit来监视这些脚本?
更新:我尝试按照这个方法创建包装脚本来启动Ruby进程,但似乎并没有创建.pid文件,而键入'./wrapper-script stop'也没有任何反应 :/
我应该在Ruby中编写pid,还是使用包装脚本创建monit所需的pid?
我有一堆长时间运行的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
)?对于目标位置是否具有写入权限?也许您可以发布您正在尝试使用的包装器,这样我可以更好地帮助您。
假设你有一个名为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 的 Monit pid 即可。
启动位置:sudo /etc/init.d/process start
停止位置:sudo /etc/init.d/process stop
祝好!
在你的 Ruby 脚本 yourapp.rb 中添加以下代码,创建名为 yourapp.pid 的 pid
文件:
File.open('/somepath/yourapp.pid', 'w') {|f| f.write Process.pid }
配置 Monit 检查 /etc/monit/conf.d/yourapp 中的 pid:
check process yourapp with pidfile /somepath/yourapp.pid
在你的 Ruby 脚本中编写 pid 文件可能是最简单的方法(只需打开一个文件并在其中写入 $$
)。 话虽如此,包装脚本方法也应该可以正常工作。 你的脚本是否有权限写入 /var/run
(或者你放置 pid 文件的任何其他位置)?