Мониторинг рубиновых процессов с помощью Monit

У меня есть куча рубиновых скриптов, которые давно работают, я хотел бы гарантировать, что каждые 30 секунд или около того.

Обычно я запускаю команды просто ruby script-name.rb

Как настроить monit для просмотра этих скриптов?

Обновление: Я попытался выполнить этот метод для создания обертки script, которая затем запускает рубин но он, похоже, не создал файл .pid и набрал './wrapper- script stop' ничего не сделал:/

Должен ли я писать pid внутри ruby ​​или использовать обертку script для создания pid, необходимого для monit?

Ответ 1

В Monit Wiki есть много примеров конфигурации:

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

Просто выберите простой и измените его в соответствии с вашими потребностями.

Обновление: оболочка script должна создать pid для вас в этой строке:

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

Вы адаптировали script к вашим потребностям? Является ли он исполняемым (chmod +x)? Имеет ли права на запись для адресата? Возможно, разместите обертку, которую вы пытаетесь использовать, чтобы я мог помочь вам.

Ответ 2

Вам не нужно писать обертку script или попробовать любую черную магию, просто используйте библиотеку 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

Как только script будет выполнен, просто вызовите его из командной строки или init.d script:

my_worker_control.rb run | start | stop | restart

Этот конфиг будет генерировать файл "my_worker.pid" в разделе "/var/run", и вы можете использовать monit для просмотра процесса с помощью этого файла.

Ответ 3

Измените файл:

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

Теперь просто используйте Monit с pid в /var/run/process.pid

начало местоположения: sudo/etc/init.d/process start

остановить местоположение: sudo/etc/init.d/process stop

Приветствия

Ответ 4

Запись файла pid в ruby ​​ script может быть проще всего для вас (просто откройте файл и напишите $$ в нем). Тем не менее, метод обёртки script должен работать нормально. Имеет ли ваш script разрешение на запись в файл в /var/run (или где бы вы не помещали pidfile)?

Ответ 5

В качестве альтернативы (для monit) посмотрите bluepill.

Ответ 6

(Разумеется, из темы, но), поскольку речь идет о рубине, почему бы вам не использовать: http://god.rubyforge.org/?

Ответ 7

Добавьте эту строку в свой ruby ​​ script yourapp.rb, который создает файл pid с именем yourapp.pid

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

Настроить Monit для проверки pid в файле /etc/monit/conf.d/yourapp

проверить процесс yourapp с помощью pidfile/somepath/yourapp.pid