2012-08-06 60 views
2

我有使用Jruby和Puma作爲Web服務器的Rails應用程序。 Puma並沒有自己守護進程,所以我將它封裝在bash腳本中以處理生成的pid(如Monit FAQ中所述)。下面的腳本是:在Jruby中使用Monit和Puma

#!/bin/bash 
APP_ROOT="/home/user/public_html/app" 
export RAILS_ENV=production 
export JRUBY_OPTS="--1.9" 
export PATH=/home/user/.rbenv/shims:/home/user/.rbenv/bin:$PATH 
case $1 in 
    start) 
     echo $$ > $APP_ROOT/puma.pid; 
     cd $APP_ROOT; 
     exec 2>&1 puma -b tcp://127.0.0.1:5000 1>/tmp/puma.out 
     ;; 
    stop) 
     kill `cat $APP_ROOT/puma.pid` ;; 
    *) 
     echo "usage: puma {start|stop}" ;; 
esac 
exit 0 

這個工作的命令行和它的作品,即使我運行下面的模擬monit的後殼執行:

env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin /bin/sh 

相關monitrc線以下:

check process puma with pidfile /home/user/public_html/app/puma.pid 
start program = "/usr/bin/env PATH=/home/user/.rbenv/shims:/home/user/.rbenv/bin:$PATH /home/user/puma.sh start" 
stop program = "/usr/bin/env PATH=/home/user/.rbenv/shims:/home/user/.rbenv/bin:$PATH /home/user/puma.sh stop" 

的monit的日誌顯示它不斷地嘗試啓動彪馬,它甚至只要再生一個新的PID得到,但始終沒能真正開始的美洲獅。每次我嘗試從其他任何環境運行此腳本時,我都會認爲它可行 - 除monit外。

+0

你不能守護配置文件嗎? https://github.com/puma/puma/blob/master/examples/config.rb#L37 – 2013-12-05 09:51:31

回答

2

我設法得到這個閱讀這篇文章後工作:running delayed_job under monit with ubuntu

出於某種原因,改變了我的monitrc用做這項工作的語法如下。我不知道爲什麼:

start program = "/bin/su - user -c '/usr/bin/env PATH=/home/user/.rbenv/shims:/home/user/.rbenv/bin:$PATH /home/user/puma.sh start'" 
stop program = "/bin/su - user -c '/usr/bin/env PATH=/home/user/.rbenv/shims:/home/user/.rbenv/bin:$PATH /home/user/puma.sh stop'"