在monit中滚动重启进程组

ftu*_*tle 5 monitoring restart monit

有没有人有任何关于如何使用monit实现滚动重启进程组的建议?

提前谢谢,fturtle

Mun*_*eeb 6

我不确定你说的是哪个服务器。但我可以为您提供一个 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
Run Code Online (Sandbox Code Playgroud)

Thin.yml 的内容看起来像,

port: 1337
pid: tmp/pids/thin.pid
rackup: /path/to/config.ru
daemonize: true
servers: 2
onebyone: true
Run Code Online (Sandbox Code Playgroud)

还有其他方法可以根据 pid 微调此重新启动。您可以使用 pid 监视文件,并根据条件仅重新启动那些瘦进程。

例如

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
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用 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
Run Code Online (Sandbox Code Playgroud)

所以现在您可以执行以下操作来重新启动所有内容:

monit -g thin restart
Run Code Online (Sandbox Code Playgroud)

或者为了实现滚动重启,先重启奇数,然后重启偶数。仅重新启动奇数:

monit -g thin-odd restart
Run Code Online (Sandbox Code Playgroud)

甚至重新启动:

monit -g thin-even restart
Run Code Online (Sandbox Code Playgroud)