0

nginx を使用して ruby​​ および php アプリケーションをホストする Debian Etch サーバーをセットアップしています。respawn アクションを使用して起動時に php-cgi プロセスを開始するように inittab を正常に構成しました。1000 件のリクエストを処理した後、php-cgi ワーカー プロセスは終了し、init によって再生成されます。inittab レコードは次のようになります。

50:23:respawn:/usr/local/bin/spawn-fcgi -n -a 127.0.0.1 -p 8000 -C 3 -u someuser -- /usr/bin/php-cgi

最初にプロセス エントリ (3 番目のコロンの後のすべて) を別のスクリプトに書き (単純に長いため)、そのスクリプト名を inittab レコードに入れましたが、スクリプトが 1 行を実行して終了するため、syslog がいっぱいになりました。次のようなエラーが表示されます:

May  7 20:20:50 sb init: Id "50" respawning too fast: disabled for 5 minutes

したがって、スクリプト ファイルを削除し、inittab に行全体を配置しました。以降、syslog にエラーは表示されません。

今、レールアプリケーションを提供するためにシンで同じことを試みています。次のコマンドを実行して、シン サーバーを正常に起動できます。

sudo thin -a 127.0.0.1 -e production -l /var/log/thin/thin.log -P /var/run/thin/thin.pid -c /path/to/rails/app -p 8010 -u someuser -g somegroup -s 2 -d start

-d (デーモン化) フラグを使用するかどうかに関係なく、まったく同じように動作します。どちらの方法でも、コマンド ライン制御はすぐに元に戻ります (プロセスはデーモン化されています)。そのコマンド全体 (sudo と絶対パスを除く) を inittab に入れると、init は (syslog で) プロセス エントリが長すぎると文句を言うので、/etc/profile のエクスポートされた環境変数にオプションを入れます。これで、次のコマンドでサーバーを正常に起動できます。

sudo thin $THIN_OPTIONS start

しかし、これを respawn アクションで inittab レコードに入れると、

51:23:respawn:/usr/local/bin/thin $THIN_OPTIONS start

ログは、環境変数がinitに表示されないことを明確に示しています。コマンドが単に「シン スタート」であるかのようです。

inittab プロセス エントリを短くするにはどうすればよいですか? THIN_OPTIONS 環境変数を設定できる /etc/profile 以外のファイルはありますか? 以前の php-cgi の経験から、コマンド全体を別のスクリプトに入れることはできないことがわかりました。

4

2 に答える 2

1

そして、あなたのオプションで薄く始めるラッパーに電話してみませんか?

start_thin.sh:
#!/bin/bash
/usr/local/bin/thin -a 127.0.0.1 -e production -l /var/log/thin/thin.log -P /var/run/thin/thin.pid -c /path/to/rails/app -p 8010 -u someuser -g somegroup -s 2 -d start

その後:
51:23:respawn:/usr/local/bin/start_thin

于 2009-05-19T13:37:24.980 に答える
0

init.d スクリプト

でスクリプトを使用する

/etc/rc.d/init.d

ランレベルを設定します

以下は、薄い、ルビー、Apacheの例です。

http://articles.slicehost.com/2009/4/17/centos-apache-rails-and-thin

http://blog.fiveruns.com/2008/9/24/rails-automation-at-slicehost

http://elwoodicious.com/2008/07/15/nginx-haproxy-thin-fastcgi-php5-load-balanced-rails-with-php-support/

使用するinitscriptの例を提供します。

編集: アスカーは、これはリスポーンを許可しないと指摘しました。私は init スクリプトを fork し、init がハングしないようにプロセスを放棄することを提案しました (スクリプト自体を fork() する可能性があり、チェックします)。そして、サーバープロセスが停止して再起動するのを待つ無限ループを作成します。

edit2 : init がスクリプトをフォークするようです。ループだけでそれを行う必要があります。

于 2009-05-14T21:32:51.507 に答える