Мониторинг рубиновых процессов с помощью Monit - PullRequest
13 голосов
/ 10 января 2011

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

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

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

Обновление: Я пыталсяследуйте этому методу для создания сценария-оболочки , который затем запускает процесс ruby, но, похоже, он не создает файл .pid, а ввод.1013 * Должен ли я написать pid внутри ruby ​​или использовать скрипт-обертку для создания pid, необходимого для monit?

Ответы [ 7 ]

6 голосов
/ 11 января 2011

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

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

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

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

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

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

4 голосов
/ 18 января 2011

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

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

1 голос
/ 07 ноября 2012

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

/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

Приветствия

0 голосов
/ 18 сентября 2014

Добавьте эту строку в ваш скрипт 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.pid

0 голосов
/ 19 января 2011

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

0 голосов
/ 18 января 2011

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

0 голосов
/ 16 января 2011

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

...