不明なインスタンスを停止してupstartを使用する


8

私は新興企業に入ったばかりなので、ログファイルに出力するための非常に基本的なスクリプトを作成しvm-service.confました/etc/init

description "Virtual Images"
author      "Me"

start on runlevel [2345]
stop on runlevel [016]
respawn   


script
echo "DEBUG: `set`" >> /tmp/vm-service.log

end script


pre-stop script
    echo "DEBUG: `set`" >> /tmp/vm-service.log
end script

私が実行するとsudo start vm-service、それは出力します:

vm-service start/running, process 29034

しかし、私が実行するとsudo stop vm-service、それは出力します:

stop: Unknown instance

を実行してみましsudo initctl reload-configurationたが、停止時にエラーが発生します。

私は料理本を見てきましたが、おそらく何か明らかなことを逃しています。

回答:


7

Upstartは、メインプロセス(スクリプトまたはexecスタンザが指定された場合に実行されるプロセス)が終了すると、ジョブが停止したと見なします。その後、Upstartは起動後プロセスを実行します。

つまり、最初のスクリプトが実行されて終了し、Upstartはジョブが停止したと見なしてから、2番目のスクリプトが実行されて終了します。すでに停止しているジョブで停止コマンドを実行すると、表示されたメッセージが出力されます。

これを処理するには、事前開始スタンザを使用します。

pre-start exec foo --bar

post-start exec baz --foo

これを行うと、Upstartは、事前開始スタンザが終了するとジョブが開始されたと見なし、停止したと見なしません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.