Resque-web を Supervisord に追加する

Resque-web を Supervisord に追加する

私は Redis やその他のソフトウェアを稼働させ続けるために走っていますsupervisord。しかし、どうしてもresque-web仕事に取り掛かることができません。

私が含める .ini は次のとおりです:

[プログラム:resque]
コマンド=/usr/local/rvm/gems/ruby-2.0.0-p195/bin/resque-web
自動起動=true
自動再起動=true
ユーザー=root
stdout_logファイル=/var/lib/resque/stdout.log
stderr_logファイル=/var/lib/resque/stderr.log

残念ながら、実行するとログservice supervisor restartに次の内容が表示されますsupervisord

INFO 終了: resque (終了ステータス 127; 予想外)

Googleによるとコード 127「コマンドが見つかりません」。ただし、そのコマンドを手動で実行すると、resque-web サーバーは正常に起動し、次の出力が表示されます。

[2013-05-24 00:03:09 -0600] 'resque-web' を起動しています...
[2013-05-24 00:03:09 -0600] ポート 5678 を試行しています...

/var/lib/resque/stderr.logsupervisord が resque-web を起動しようとしたときに、次のメッセージが表示されることも注目に値します。

/usr/bin/env: ruby​​_noexec_wrapper: そのようなファイルまたはディレクトリはありません

困惑しています。 supervisord で設定した他のソフトウェアはすべて問題なく動作します。頭を悩ませているのはこれだけです...

編集1

そこで、これを回避するために簡単なbashスクリプトを作成しようとしましたが、今度はファイルに別のエラーが発生しますstderr.log。私が含める.iniは次のように変更されています。command=/usr/local/bin/resque-web

/usr/local/bin/resque-web

#!/bin/bash
ソース /usr/local/rvm/environments/default
レスキューウェブ

エラー

usr/local/rvm/gems/ruby-2.0.0-p195/gems/vegas-0.1.11/lib/vegas/runner.rb:82: `app_dir': も --app-dir も EVN['HOME'] も定義されていません (ArgumentError)
        /usr/local/rvm/gems/ruby-2.0.0-p195/gems/vegas-0.1.11/lib/vegas/runner.rb:66:in `initialize' から
        /usr/local/rvm/gems/ruby-2.0.0-p195/gems/resque-1.24.1/bin/resque-web:13:in `new' から
        /usr/local/rvm/gems/ruby-2.0.0-p195/gems/resque-1.24.1/bin/resque-web:13:in から `'
        /usr/local/rvm/gems/ruby-2.0.0-p195/bin/resque-web:23:in `load' から
        /usr/local/rvm/gems/ruby-2.0.0-p195/bin/resque-web:23:in から `'
        /usr/local/rvm/gems/ruby-2.0.0-p195/bin/ruby_noexec_wrapper:14: から `eval'
        /usr/local/rvm/gems/ruby-2.0.0-p195/bin/ruby_noexec_wrapper:14:in から `'

答え1

どうやら、supervisor はデーモン化されたプロセスであるため、resque-web では動作しないようです。解決策は、/etc/cron.d/resque次のものを作成して配置することでした。

シェル=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/rvm/gems/ruby-2.0.0-p195/bin
ホーム=/
* * * * * ルートresque-web

これは 1 分ごとに実行され、クラッシュした場合はサーバーを再起動します。私にとってはこれで十分です。

関連情報