2011-05-03 58 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