Мониторинг процессов 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)?
(конечно, вне темы, но) поскольку речь идет о 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.пид