【问题标题】:monit does not find the unicorn worker in production servermonit 在生产服务器中找不到独角兽工作者
【发布时间】:2013-05-01 18:29:10
【问题描述】:

我正在使用这个 gem 来部署 kapify

这是我的独角兽配置:

unicorn config

unicorn.rb.erb

unicorn_init.erb

我的部署中有:

server "111.111.111.111", :web, :app, :db, primary: true

set :application, 'myapp'
set :user, "hyperrjas"
set :deploy_to, "/home/#{user}/apps/#{application}"
set :deploy_via, :remote_cache
set :use_sudo, false

set :scm, "git"
set :repository, "path_to_my_remote_reposytory.git"
set :branch, "master"
set :current_path, "/home/#{user}/apps/#{application}/current"
set :shared_path, "/home/#{user}/apps/#{application}/shared"

set :unicorn_workers, 1
set :unicorn_pid, "#{shared_path}/pids/unicorn.pid"
set :server_name, "myserver.com"

这是我在远程服务器中的 pid:

ps aux | grep unicorn
1000      6037  0.4 12.5 320464 127628 ?       Sl   14:09   0:37 unicorn master -c /home/hyperrjas/apps/myapp/shared/config/unicorn.rb -D                                                         
1000      6079  0.2 13.8 335784 140828 ?       Sl   14:10   0:17 unicorn worker[0] -c /home/hyperrjas/apps/myapp/shared/config/unicorn.rb -D                                                      
1000      6322  0.0  0.0   9384   868 pts/0    S+   16:14   0:00 grep unicorn

这是我的config/deploy/templates/monit/unicorn.erb 文件:

check process myapp_unicorn with pidfile /home/hyperrjas/apps/myapp/current/tmp/pids/unicorn.pid
start program = "/etc/init.d/unicorn_myapp start"
stop program = "/etc/init.d/unicorn_myapp force-stop"

check process myapp_unicorn_worker_0 with pidfile /home/hyperrjas/apps/myapp/current/tmp/pids/unicorn.0.pid
start program = "/bin/true"
stop program = "/usr/bin/test -s /home/hyperrjas/apps/myapp/current/tmp/pids/unicorn.0.pid && /bin/kill -QUIT `cat /home/hyperrjas/apps/myapp/current/tmp/pids/unicorn.0.pid`"
if mem > 200.0 MB for 5 cycles then restart
if cpu > 50% for 15 cycles then restart
if 5 restarts within 25 cycles then timeout
alert myapp@gmail.com only on { pid }
if changed pid 2 times within 64 cycles then alert

我可以在monit中看到unicorn worker pid的下一条路径:

Pid file /home/hyperrjas/apps/myapp/current/tmp/pids/unicorn.0.pid

还有消息:

Status  Not monitored

远程服务器中的独角兽pid在/home/myapp/apps/myapp/current/tmp/pids/unicorn.pid

我在/home/hyperrjas/apps/myapp/current/tmp/pids/ 中看不到pid unicorn.0.pid

Monit 正在监控独角兽 pid。

如何使用 monit 我的 unicorn worker 进行监控?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 nginx unicorn monit


    【解决方案1】:

    我在设置monit 时使用this configuration 来观察我的Linode 上三个不同应用程序的独角兽主进程和工作进程。 This article 将引导您完成设置以及每件事如何协同工作。

    我不建议尝试即时为 unicorn 生成 monit 配置,而是告诉 unicorn 始终将 PID 写入您的应用程序中的相同文件名,然后在 monit 配置中引用这些文件。

    如果您遇到困难,请告诉我,我会帮助您。另外,如果我的配置有帮助,请告诉我,我会发布。

    【讨论】:

    • 感谢您的回复。我正在使用这个 gem github.com/ivalkeen/kapify 进行部署,除了独角兽工人的监视器外,所有东西都运行良好。我认为问题在于Monit/home/hyperrjas/apps/myapp/current/tmp/pids/ 文件夹中看不到unicorn.0.pid。我在这个文件夹中有 2 个文件:delayed_job.pidunicorn.pid。非常感谢
    • 这可能是因为在您部署时,current 目录已被重新符号链接。尝试指向独角兽将PID文件存储在/home/hyperrjas/apps/myapp/shared/pids或类似的地方,因为shared目录不会改变。
    • 我已将我的 pid 文件夹更改为 /home/hyperrjas/apps/myapp/shared/pids 并且我遇到了同样的问题:我可以在监控中看到红色消息 Execution failed 与我的独角兽工人。我可以在监视器中看到 Pid file /home/hyperrjas/apps/myapp/shared/pids/unicorn.0.pid 。但是我在/home/hyperrjas/apps/myapp/shared/pids/ 中看不到这个pid 文件在这个文件夹中我只能看到1 个文件:unicorn.pid 非常感谢!
    • 我在我的问题中添加了我的独角兽配置。非常感谢!
    • 通读这篇文章,如果有帮助,请告诉我,特别是“after_fork”部分:stopdropandrew.com/2010/06/01/…
    猜你喜欢
    • 2012-06-07
    • 2014-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 2011-01-27
    • 2013-02-20
    相关资源
    最近更新 更多