有人对我如何使用monit实现进程组的滚动重启有任何建议吗?

提前致谢,
tur

最佳答案

我不确定您在谈论哪个服务器。但是我可以为您提供一个瘦示例,该示例本身支持滚动重启。 (选项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对此重启进行微调。您可以使用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

另一种方法是使用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

关于monitoring - 在monit中滚动重启进程组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3906365/

10-10 14:55