Роллинг рестарт группы процессов в мониторе - PullRequest
5 голосов
/ 11 октября 2010

Есть ли у кого-нибудь какие-либо предложения о том, как мне добиться постепенного перезапуска группы процессов с помощью monit?

Заранее спасибо, fturtle

1 Ответ

4 голосов
/ 10 февраля 2013

Я не уверен, для какого сервера вы говорите.Но я могу предоставить вам пример для thin, который поддерживает сам перезапуск.(опция onebyone: true)

Так что для monit вы можете использовать что-то вроде,

if ... then exec '/path/to/thin_restart.sh'

И thin_restart.sh будет что-то вроде

source /path/to/scripts/rvm
rvm use your_gemset@some_ruby
thin -C thin.yml restart

И содержимое файла thin.yml будет выглядеть так:

port: 1337
pid: tmp/pids/thin.pid
rackup: /path/to/config.ru
daemonize: true
servers: 2
onebyone: true

Существуют другие способы точной настройки этого перезапуска на основе pid.Вы можете отслеживать файлы с помощью pids и перезапускать только эти тонкие процессы в зависимости от условий.

например,

check process app-1337
  with pid /path/to/app.1337.pid
  start = 'thin -d -p 1337 start'
  stop  = 'thin -d -p 1337 -P /path/to/thin.1337.pid stop'
  if cpu usage > 50% then restart
check process app-1338
  with pid /path/to/app.1338.pid
  start = 'thin -d -p 1338 start'
  stop  = 'thin -d -p 1338 -P /path/to/thin.1338.pid stop'
  if cpu usage > 50% then restart

Другой способ - использовать группы, которые предоставляет monit.

Расширение вышеприведенного примера.

check process app-1337
  with pid /path/to/app.1337.pid
  group thin
  group thin-odd
  start = 'thin -d -p 1337 start'
  stop  = 'thin -d -p 1337 -P /path/to/thin.1337.pid stop'
  if cpu usage > 50% then restart
check process app-1338
  with pid /path/to/app.1338.pid
  group thin
  group thin-even
  start = 'thin -d -p 1338 start'
  stop  = 'thin -d -p 1338 -P /path/to/thin.1338.pid stop'
  if cpu usage > 50% then restart
check process app-1337
  with pid /path/to/app.1339.pid
  group thin
  group thin-odd
  start = 'thin -d -p 1339 start'
  stop  = 'thin -d -p 1339 -P /path/to/thin.1339.pid stop'
  if cpu usage > 50% then restart
check process app-1340
  with pid /path/to/app.1340.pid
  group thin
  group thin-even
  start = 'thin -d -p 1340 start'
  stop  = 'thin -d -p 1340 -P /path/to/thin.1340.pid stop'
  if cpu usage > 50% then restart

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

monit -g thin restart

или, чтобы добиться своего рода скользящего перезапуска, перезапустите нечетные, затем четные.Чтобы перезапустить только нечетные:

monit -g thin-odd restart

и перезапустить четные:

monit -g thin-even restart
...