Мониторинг процессов ruby с помощью Monit

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

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

Как настроить monit для работы с этими сценариями?

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

должен ли я написать pid внутри ruby или использовать сценарий-оболочку для создания pid, необходимого для monit?

7 ответов


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

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

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

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

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

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


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

представьте, что у вас есть рабочий класс, у которого есть метод "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.рубидий run|start|stop|restart

эта конфигурация создаст " my_worker.pid "file under" /var / run", и вы можете использовать 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 ) 

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

начальное положение : sudo / etc / init.д/начать процесс

остановить местоположение : sudo / etc / init.д/остановить процесс

Ура


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


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


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


добавьте эту строку в свой скрипт ruby 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.пид