私は今Upstartを始めているので、次のログファイルを印刷するための非常に基本的なスクリプトを書いてい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
停止するとエラーが発生します。
私は見たことがないレシピしかし、私はおそらく明らかなものを見逃しているようです。
ベストアンサー1
デフォルトプロセス(スクリプトまたはexecセクションが指定されている場合に実行されるプロセス)が終了すると、Upstartはジョブが停止したと見なします。その後、Upstartはリリース後にプロセスを実行します。
したがって、何が起こっているのかは、最初のスクリプトが実行され、終了し、Upstartがジョブの停止を考慮し、次に2番目のスクリプトが実行され終了することです。停止したジョブに対して停止コマンドを実行すると、表示されるメッセージが印刷されます。
この問題を処理するには、プリブートセクションを使用します。
pre-start exec foo --bar
post-start exec baz --foo
これにより、事前開始セクションが完了すると、Upstartはジョブを停止せずに開始済みとしてマークします。