2011-05-03 62 views
7

尝试了几个小时后(还试图使用God和Bluepill),我决定在这里问我的问题,因为我完全无能为力,因此我无法解决这个问题。OSX/Linux上的Monit + RVM + Thin

我有一个Rails应用程序。我想用Thin作为我的应用服务器。我想用Monit来监控我的Thin实例。我使用RVM作为我的本地用户来管理我的Ruby版本。

我已成立,将assumably做我想做的事情,但下面的monit文件不:

check process thin-81 
    with pidfile /Users/Michael/Desktop/myapp/tmp/pids/thin.81.pid 

    start program = "/Users/Michael/.rvm/gems/ruby-1.9.2-p180/bin/thin start -c /Users/Michael/Desktop/myapp -e production -p 81 -d -P tmp/pids/thin.81.pid" 
    stop program = "/Users/Michael/.rvm/gems/ruby-1.9.2-p180/bin/thin stop -c /Users/Michael/Desktop/myapp -P tmp/pids/thin.81.pid" 

    if totalmem is greater than 150.0 MB for 2 cycles then restart 

如果我只是复制/粘贴start program在命令行(外Monit)它的工作原理。之后再停止Thin实例stop program也是如此。但是,通过Monit运行它似乎不起作用。

-v详细模式下运行它产生以下:

monit: pidfile '/Users/Michael/Desktop/myapp/tmp/pids/thin.81.pid' does not exist 

这使我相信,从来不薄初始化。 Monit运行的是root还是别的?如果它确实存在,那么它显然不会安装正确的宝石,因为我使用的是RVM,而不是“系统”Ruby。我目前在OSX上(但最终会部署到Linux) - 有谁知道这可能是什么原因?如果Monit是通过root运行的,那么我怎样才能让它使用RVM?或者我可以告诉Monit执行启动/停止程序Michael:staff(我认为它将在OSX上?)

任何帮助非常感谢!

回答

11

monit清除环境并且不会为您的命令运行shell(更不用说交互式的)。我发现我必须这样做:

作为monit启动命令。

+0

谢谢,这是我不知道的。 :) – 2011-05-25 12:06:28

4

一个更好的方法是使用RVM包装来创建用于瘦的自定义可执行文件。它会创建正确的环境变量来使用正确的红宝石和宝石,然后启动瘦身。阅读更多关于它与神在这里使用它:https://rvm.io/integration/god/。它应该工作一样与monit的

创建包装: rvm wrapper [email protected]set bootup thin

然后改变start programstop program使用您刚才创建的可执行文件。

7

我的RVM谷歌组中发现了另一种选项如下:

start program = "/bin/su - myuser -c '/path/to/myscript.rb start' " 

苏 - 用户运行用户的shell作为登录shell,所以如果 用户的shell是bash,它会导致〜 /.bash_profile中运行,因此 环境变量应该是相同的只是在这之后用户 登录。

我们需要苏路径,否则,monitrc将无法找到苏可执行文件。

+0

终于得到这个以root身份运行monit并使用'/ bin/su - user' ......谢谢! – 2012-04-06 13:08:06

+0

迄今为止最简单的解决方案。谢谢! – idrinkpabst 2012-09-20 23:25:12