web-dev-qa-db-ja.com

upstartからデーモンプロセスを実行する

Ubuntu 12.04 LTSの下でVPSでアプリケーションを実行しています。

また、アプリケーションの1つのデーモンプロセスに問題があります。このプロセスは「delayed_job」と呼ばれます(慣れていない場合-これは単なるバックグラウンドタスクハンドラです)。

このプロセスの問題は、ときどき強制終了することです(サーバー上のRAMの量が1GBに制限されているためだと思われます)。

しかし、このことの主な問題は、「Unicorn」(Railsアプリサーバー)プロセスとは異なり、クラッシュまたは「kill」シグナルの後に再度ブートすることは対応不可であることです、何が起きても常に再起動されます。

そして、はい、これISは非常に重要です。多くのアプリケーション機能がバックグラウンドタスクを使用しているからです。

VPSのメンテナンス作業(VPSの所有者によって開始された)があり、再起動後に「delayed_job」プロセスがシステムに存在しなくなったときにも同じことが起こります。

これは、毎回実行して起動するコマンドです:Rails_ENV=production script/delayed_job start

これはよく知られた問題ですが、インターネットで見つけた唯一の解決策は次の記事です: http://www.alexreisner.com/code/upstart Linuxの使用を提案するプロセスが強制終了またはクラッシュした場合にプロセスを再起動できる「respawn」オプションを備えた「upstart」機能。

この記事は少し古くなっていますが、Ubuntu 12.04でこの機能をサポートする必要があることがわかり、/etc/initディレクトリ(「delayed_job.conf」と呼ばれる)にシンボリックリンクを作成しました。 「アプリケーションフォルダーの1つ(正確にはapp_name/config)に配置します。この記事で説明したことはすべて実行しました。

私の問題は、コンソールでこの新しいプロセス(start delayed_job)を起動しようとすると、

delayed_job start/running, process 6000

しかし実際には、「delayed_job」プロセスはまったく作成されていません。

そして、initctlプロセスのステータス(status delayed_job)はまだです:delayed_job stop/waiting

kill -9 6000を実行した後、-bash: kill: (6000) - No such processを取得します

したがって、これは何も実行されないことを意味します。さまざまな条件下でこれを何度も実行してみました-何も、役に立たない。単に機能しません。

私がそれを機能させることを試みることができるものはありますか、それはちょうど役に立たないのですか?

4
Dmitri

EXPECTスタンザが正しくない、または存在しないように聞こえます。 Upstartは間違ったpidを追跡しています。 EXPECT の使用方法については、クックブックを参照してください。そのセクションを理解することがいかに重要であるかについての警告に注意してください。

Upstartがpidを追跡するためにアプリケーションがフォークしすぎている(2回以上フォークしていることを意味する)場合は、自分で追跡できる場合があることに注意してください。アプリにはpidファイルを書き込むメカニズムがあるか、start-stop-daemonでキャプチャできる場合があります。例、特にpg_agent.confファイルについては this answerを参照してください。

編集:

Upstartがアプリのpidを追跡できない場合、RESPAWNスタンザを使用できないことに注意してください。この場合、Upstartはニーズに合わない場合があります。おそらくforeverのような競合製品はそうなります。わからない。

4
Brian.D.Myers