我正在尝试使用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会是什么?任何人都可以提供一些可以帮我设置的例子吗?
答案 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配置更具可读性。