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 の経験から、コマンド全体を別のスクリプトに入れることはできないことがわかりました。