神を使用してユニコーンを監視する - ゼロ以外のコードで終了し始めます= 1
-
28-09-2019 - |
質問
私はユニコーンを監視するために神の脚本に取り組んでいます。 GitHubの例スクリプトから始めて、サーバーの構成に合わせて変更しています。神が走っていると、次のような命令 god stop unicorn
と god restart unicorn
うまくいきます。
でも、 god start unicorn
結果 WARN: unicorn start command exited with non-zero code = 1
. 。奇妙な部分は、設定ファイルから開始スクリプトを直接コピーすると、まったく新しいマスタングのように起動することです。
これが私の開始コマンドです:
/usr/local/bin/unicorn_rails -c /home/my-linux-user/my-rails-app/config/unicorn.rb -E production -D
すべてのパスを構成ファイルの絶対として宣言しました。このスクリプトが機能するのを妨げている可能性のあるアイデアはありますか?
解決
私はUnicornをアプリサーバーとして使用していませんでしたが、以前に監視に神を使用しました。
あなたが神を始めてあなたの構成ファイルを与えるときに正しく覚えているなら、それはあなたがそれを視聴するように言ったことは何でも自動的に起動します。 Unicornはおそらくすでに実行されているため、エラーが発生している理由です。
実行してこれを確認してください god status
あなたが神を始めたら。そうでない場合は、コマンドの出口ステータスが何であるかをコマンドラインで確認できます。
/usr/local/bin/unicorn_rails -c /home/my-linux-user/my-rails-app/config/unicorn.rb -E production -D;
echo $?;
そのエコーは、最後のコマンドの出口ステータスを印刷します。ゼロの場合、最後のコマンドはエラーを報告しませんでした。 Unicornを2回連続で起動してみてください。2回目は1回に戻ることを期待しています。
編集:
コメントからの実際の解決策を含めて、これは一般的な応答のように思われます。
プロセスが特定のユーザーとして実行される必要がある場合、明示的なユーザーとグループを設定できます。
God.watch do |w|
w.uid = 'root'
w.gid = 'root'
# remainder of config
end
他のヒント
私の問題は、私がルートとしてバンドルしたことがないということでした。これが私がしたことです:
sudo bash
cd RAILS_ROOT
bundle
あなたはこれを決してしないようにあなたに言っている警告を受けます:
バンドラーをルートとして実行しないでください。バンドラーは、必要かどうかをsudoに尋ねることができ、ルートとしてバンドルをインストールすると、このマシンのすべての非ルートユーザーのこのアプリケーションが破損します。
しかし、それは私が神と一緒に走るためにレシクやユニコーンを手に入れることができる唯一の方法でした。これが誰にでも役立つ場合、これはEC2インスタンスでした。
ログオプションを追加して、デバッグに大いに役立ちました。
God.watch do |w|
w.log = "#{RAILS_ROOT}/log/god.log"
# remainder of config
end
最終的に、私のバグは start_script
神はで処刑されました development
環境。私はこれを追加して修正しました RAILS_ENV
スタートスクリプトに。
start_script = "RAILS_ENV=#{ENV['RACK_ENV']} bundle exec sidekiq -P #{pid_file} -C #{config_file} -L #{log_file} -d"