2011-01-10 8 views
13

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

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

Как я могу настроить Monit выглядеть после этих сценариев?

Update: Я пытался следовать this method to create a wrapper script, который затем запустит процесс рубиновый, но это, похоже, не создавать .pid файл и введя «./wrapper-script остановки» сделал ничего:/

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

+0

Это то, для чего оно предназначено. – DigitalRoss

ответ

6

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

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

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

Обновление: сценарий обертка должна создать идентификатор процесса для вас в этой строке:

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

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

+0

Спасибо, но я не могу найти файл .pid на диске для процессов ruby? – Tom

+5

Ну, если ваши сценарии не создают один, тогда нет файла PID. Либо измените свой сценарий, чтобы создать его, либо следуйте за ним: http://mmonit.com/wiki/Monit/FAQ#pidfile –

+0

Том, вы делаете какие-либо успехи в этом вопросе? Помогли ли ссылки? Если нет, можете отредактировать свой вопрос, чтобы сообщить нам, как далеко вы добрались. –

0

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

4

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

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

+0

Есть ли у вас пример использования демонов? – Tom

+0

Обновленный ответ. –

+0

В конце это тоже сценарий оболочки, отвлеченный в рубиновый камень. Версия bash из Monit Wiki больше не является «черной магией», чем эта. –

0

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

0

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

+0

Я использую крошечный VPS, использование памяти Богов, казалось, было дороже, чем я мог себе позволить. – Tom

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) 

Теперь просто использовать Monit с ИДП в /var/run/process.pid

начальное местоположение: Судо /etc/init.d/process начать

остановка местоположение: Судо /etc/init.d/process остановить

Приветствия

0

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

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

Настройка монит для проверки ИДП в /etc/monit/conf.d/yourapp

проверка процесса YourApp остроумие h pidfile /somepath/yourapp.pid

Смежные вопросы