私はもともとStackOverflowでこの質問をしました。その後、これはおそらくより良い場所であることに気づきました。
delay_jobプロセスを監視するためのbluepillセットアップがあります。(Ruby On Railsアプリケーション)
Ubuntu 12.10。を使用する
Ubuntuを使用してbluepillサービス自体を開始および監視していupstart
ます。私の初期設定は以下(/etc/init/bluepill.conf
)です。
description "Start up the bluepill service"
start on runlevel [2]
stop on runlevel [016]
expect daemon
exec sudo /home/deploy/.rvm/wrappers/<app_name>/bluepill load /home/deploy/websites/<app_name>/current/config/server/staging/delayed_job.bluepill
# Restart the process if it dies with a signal
# or exit code not given by the 'normal exit' stanza.
respawn
私ものexpect fork
代わりに試しましたexpect daemon
。また、expect...
行を完全に削除しようとしました。
マシンが起動すると、bluepillは正常に起動します。
$ ps aux | grep blue
root 1154 0.6 0.8 206416 17372 ? Sl 21:19 0:00 bluepilld: <app_name>
bluepillプロセスのPIDはここでは1154です。しかしupstart
、間違ったPIDを追跡しているようです。存在しないPIDを追跡しています。
$ initctl status bluepill
bluepill start/running, process 990
sudo
bluepillプロセスを開始したプロセスのPIDを追跡していると思います。
これは、を使用してbluepillを強制的に強制終了した場合、bluepillプロセスが再生成されるのを防ぎkill -9
ます。
さらに、誤ったPIDが追跡されているため、再起動/シャットダウンがハングするだけで、毎回マシンをハードリセットする必要があります。
ここで何が問題になりますか?
更新:
この問題は、Ubuntu 14.04.2では今日(2015年5月3日)のままです。
問題は、sudoを使用しているためではありません。私はもうsudoを使用していません。私の更新されたupstart構成はこれです:
description "Start up the bluepill service"
start on runlevel [2]
stop on runlevel [016]
# Restart the process if it dies with a signal
# or exit code not given by the 'normal exit' stanza.
respawn
# Give up if restart occurs 10 times in 90 seconds.
respawn limit 10 90
expect daemon
script
shared_path=/home/deploy/websites/some_app/shared
bluepill load $shared_path/config/delayed_job.bluepill
end script
マシンが起動すると、プログラムは正常にロードされます。ただし、上記のように、upstartは引き続き間違ったPIDを追跡します。
コメントに記載されている回避策により、ハングの問題を解決できる場合があります。しかし、私はそれを試していません。
ps aux | grep 990
それを行う必要がpstree 990
ありますが、より有益かもしれません。