2

Jruby を使用し、Web サーバーとして puma を使用して Rails アプリをセットアップしました。Puma は単独ではデーモン化しないため、pid の生成を処理するために bash スクリプトでラップしました (Monit FAQ で説明されています)。スクリプトは以下のとおりです。

#!/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 ログは、常に puma を開始しようとしていることを示しており、新しい PID を再生成することさえできますが、実際に puma を開始することはできません。このスクリプトを他のすべてのコンテキストから実行しようとするたびに、それが機能すると考えることができます-monitからは除きます.

4

1 に答える 1

2

この投稿を読んだ後、私はなんとかこれを機能させることができました: runningdelay_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'" 
于 2012-08-06T08:21:21.747 に答える