upstartでデーモンのシャットダウンコマンドを指定する方法


9

upstart構成で、サーバーのシャットダウンに使用するコマンドを定義するにはどうすればよいですか。2つの独立したプロセスを持つデーモンがあるとします。

  • startup.sh-サーバーを起動します
  • shutdown.sh-サーバーをシャットダウンする

このようなアップスタートファイルがあるとします。

description "Some Example Service"
author "Me"

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

exec startup.sh 

shutdown.shサーバーをシャットダウンするときに呼び出す必要があることをupstartに伝えるにはどうすればよいですか?upstartは通常、デーモンをシャットダウンすることをどのように期待していますか?

回答:


10

を使用execしてプロセスを開始することは問題ありませんが、プロセスを停止するときに特定のスクリプトまたはコマンドセットを実行する必要がある場合は、pre-stopスタンザを使用でき ます。

pre-stop exec shutdown.sh

おそらく、あなたのデーモンが特別なクリーンアップを必要としているためか、おそらくあなたがexecスタンザを使ってみたがうまくいかなかったと思います。正常に動作するデーモンは、ジョブが停止したときにupstartからシグナルを受信する必要があることに注意してください。デーモンがシグナルを適切に処理する場合、追加のクリーンアップは必要ありません。

ジョブの停止には、SIGTERMの送信が含まれます。SIGTERMの前に行う必要がある場合は、ここで行います。間違いなく、サービスはSIGTERMを非常に適切に処理する必要があるため、これは必要ありません。

ディスクへのフラッシュなどの重要なものがあり、キルタイムアウトを上げることがオプションではない場合、事前停止はそのための悪い場所ではありません

また、ジョブを停止したときに何が起こるかのワークフロー全体については、このセクションをお読みください。事前停止が実行されたときと、その後プロセスに信号が送信される方法に注意してください。これは、upstartがジョブの停止を正常に処理する方法です。

私のソースは公式のUpstartクックブックです:http : //upstart.ubuntu.com/cookbook/


1
「正常に動作するデーモンは、ジョブが停止したときにupstartからシグナルを受信する必要があることに注意してください。シグナルを適切に処理する場合、追加のクリーンアップは必要ありません。」-プログラマーの仕事以外のことを制御するために、Unixの世界ではスクリプトを使用していることに注意してください。そして、これはとんでもない発言です。たとえば、電子メールの送信、disからのロックの削除などを含める場所が必要であり、このタスクはデーモン自体の一部である必要はないからです。したがって、upstartはサーバー環境で使用する準備ができていません。
kakaz

この答え(One!)から、必要なことを行うための良い方法がないことがわかりますか?
kakaz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.