使用monit运行和停止gunicorn服务器

时间:2015-04-08 14:03:25

标签: python flask gunicorn monit

我正在尝试使用monit来管理服务器上的内容。我想做的是在3个不同的端口上运行3个不同的gunicorn服务器。

目前,我可以一次运行所有服务器,例如在屏幕上。我可以通过命令启动服务器:

gunicorn -c app1.http_server.config app1.http_server.server:app
gunicorn -c app2.http_server.config app2.http_server.server:app
gunicorn -c app3.http_server.config app3.http_server.server:app

根据我对monit如何工作的理解,我应该monitrc文件,并指定所有的东西,如:

#set mailserver localhost
#set alert myemail@gmail.com

check process app1 with pidfile /var/run/app1.pid
    start program = "gunicorn -c app1.http_server.config app1.http_server.server:app"
    stop program  = "???"
    if failed unixsocket ??? then start
    if cpu > 50% for 5 cycles then alert

# TODO app2, app3

check system resources
    if loadavg (1min) > 4 then alert
    if loadavg (5min) > 2 then alert
    if memory usage > 75% then alert
    if cpu usage (user) > 70% then alert
    if cpu usage (system) > 30% then alert
    if cpu usage (wait) > 20% then alert


check filesystem rootfs with path /
    if space usage > 80% then alert

我试图将各种东西用于停止程序字段并且同样启动程序,但是monit无法启动gunicorn服务器。所以我的问题是如何从monit运行和停止gunicorn服务器?当我发射它时,炮弹的unixsocket会是什么?任何人都可以提供一些可以帮我设置的例子吗?

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。 Monit对像" / virtualenv_path / bin / gunicorn"这样的完整路径更开心。如果您不使用virtualenv,只需将其放置在任何位置即可将其删除。命令很长,但它的工作方式是这样的:

check process pymonit with pidfile /path/to/pid/gunicorn.pid
  start program = "/virtualenv_path/bin/python /virtualenv_path/bin/gunicorn -c /project/path/gunicorn.conf.py /project/path/wsgi:application"
  stop program = "/usr/bin/pkill -f '/virtualenv_path/bin/python /virtualenv_path/bin/gunicorn -c /project/path/gunicorn.conf.py /project/path/wsgi:application'"
  if failed host 127.0.0.1 port 8011 protocol http then restart
  if 5 restarts within 5 cycles then alert

在你的gunicorn.conf中,你应该有这样的东西:

bind = '127.0.0.1:8011'
...
pidfile = '/path/to/pid/gunicorn.pid'

在你的gunicorn.conf中。

答案 1 :(得分:0)

似乎您将monit用作启动服务?

根据您的操作系统,您仍然应该为应用创建sysvinit,systemd或upstart文件,这也意味着它将在启动时启动,并且不依赖于monit的运行并具有第一个刻度。

这也简化了monit的配置,使其仅用于服务app1的启动/停止。

如果操作系统没有这两个系统中的任何一个,则创建一个Shell脚本以正确地获取您的virtualenv并更改目录(尽管gunicorns chdir不需要此脚本),那么您的monit配置更具可读性。