web-dev-qa-db-ja.com

アップスタートジョブの再起動に失敗し、停止/再起動しようとするとハングします

私はUbuntu 12.04のUpstart 1.5を使用して、一部のユーザーが作成したプロセスを管理していますが、起動時にシステムジョブとして管理する必要があります。/etc/initに.confファイルを作成します。次のとおりです。

description "Start face services recognition and monitors it"
version "1.0"
start on runlevel[5]
stop on runlevel[06]
respawn
expect fork
normal exit 0 TERM STOP
script
exec sh -c /home/verstand/facefeatures
end script
post-stop script
if [ ! $EXIT_STATUS && ! $EXIT_SIGNAL ]
then
exec Sudo -u $USER "/sbin/shutdown -r now"  
fi
end script

ここでの信号は、Upstartがプロセスの再生成に失敗した緊急の場合にシステムを再起動することを目的としています。

現在、問題はプロセスを開始するときにSudo initctl start facefeaturesで正常に実行されますが、停止しようとするとハングし、Ctl + Cを使用してttyコントロールを返す必要があります。さらに、再起動または再起動しようとすると、Upstartは既に実行されていることを報告します:start/running facefeaturesが、initctl listを使用すると、Upstartはプロセスが強制終了されたかのように報告します:stop/killed facefeatures

また、最初に再起動するとプロセスが正常に実行されますが、2回目に再起動するとそれ以上は実行されません...

Confファイルの問題は何ですか?これを行う正しい方法は何ですか?

2
Edgar Sampere

facefeaturesがスクリプトではない場合、どのプロセスを監視するかわからないという問題が発生すると考えています。 scriptスタンザではなくexecで開始してください:

description "Start face services recognition and monitors it"
version "1.0"
start on runlevel[5]
stop on runlevel[06]
normal exit 0 TERM STOP
expect fork
respawn
exec /home/verstand/facefeatures
post-stop script
    if [ ! $EXIT_STATUS && ! $EXIT_SIGNAL ]
    then
        exec Sudo -u $USER "/sbin/shutdown -r now"  
    fi
end script

サービスを停止すると、プログラムはTERMを受け取ります。そのシグナルに反応しない場合、5秒後に殺されます。

2
tombert