init.dからupstartまで、ブリッジはありますか?


11

/etc/init.dで使用するのに最適なスクリプトがあります。実際、私はそれらの多くを持っています。すべてがTanuki Java Service Wrapperで作成されています。

このようなシェルスクリプトをスタートアップスクリプトとしてラップするためのシンプルなテンプレートが存在するように思えますが、少しグーグルでは明らかにしていません。

何か不足していますか?

回答:


9

このためのテンプレートを見たことを覚えていません。ただし、皮肉なことに、技術的には、最初の段階でinit.dスクリプトを開始することは、下位互換性ジョブrcとrcSのおかげです。

スタートアップの仕事としてあなたが持っているものは何でも書き直すことを検討しますが、いくつかのスクリプトは変換が難しいことを知っているので、ここで私のスクリプトのいくつかでしばらくやったことがあります:

description "xyz"
author "xyz"
start on runlevel 5
stop on runlevel [!5]

pre-start script
    # do my work here to start the service
end script

post-stop script
    # do work here to stop the service
end script

サービスの性質に応じて、それが持続するか、それ自体を分岐するexpect forkかにかかわらtaskず、ジョブファイルに追加するか、ジョブファイルに追加する必要があります。

思考を完了するために、通常、これで完全なスタートアップジョブファイルがすべてです。すべての事前開始作業が行われ、すべてのクリーンアップが行われます。残っているのは、通常次のように追加されるサービス自体です。

exec service_cmd

スタートアップでは、ドキュメントには実行レベル3,4、および5は使用されていないと書かれています。したがって、実行レベル2を使用する必要があります。
djangofan11年

しばらく経ちましたが、GUIが起動した状態で5がシステムアップしていると確信しています。少なくとも以前はそうでした。
ジョセフロジャース

6

したがって、新興企業の仕事の1つのポイントは、簡単に書くことです。

init.dスクリプトには、繰り返し繰り返される多くのシェルスクリプトマジックがあります。ケースステートメント、pidfileトラッキング、lsbコメント行。良いinit.dスクリプトを読まずに書く方法はあまり明確ではありません。

既にすべての問題を記述している場合、別のコメントで述べたように、別のupstartジョブ/イベントに依存しない限り、upstartジョブは必要ありません。

しかし、実際には、新興企業は物事を本当にシンプルにします。tmpdirs、ulimits、または実行時引数などを設定する必要がない限り、事前起動は必要ありません。サービスの後に整頓することを確実にしたい場合を除き、ポストストップは必要ありません(サービスは実際に通常の終了時にクリーンアップする必要があります)。

多くの場合、多くのオプションを含む巨大なinit.dスクリプトは、10〜15行のupstartジョブになります。最も複雑なinit.dスクリプトでは、ほとんどのロジックを事前開始にダンプできます。ここで重要なのは、プロセスの環境をセットアップするためのコードのほんの一部であり、start / stop / respawn / etcの処理に関するロジックではないということです。

最も困難な部分、および人々が最も頻繁に失敗する部分は、いつ仕事を開始/停止するかを知ることです。start on runlevel [2345]論理的なように見えますが、ローカルファイルシステムのマウントのように、ネットワークがその時点で並行して起動しているという事実を無視します。重要なのは、実行するために必要な最小限のもの(他のサービス、ファイルシステム、ネットワークなど)を正確に把握し、それらが完了したら開始することです。ほとんどの伝統的なネットワークサービスはするべきですstart on (local-filesystems and net-device-up IFACE!=lo)


3

Upstartは、のSysVスタイルのinitスクリプトとの下位互換性を維持していると考えました/etc/init.d。initスクリプトを変更せずに使用できるはずです。


ありますが、順序を予測するのはそれほど簡単ではありません。rc2.d / S99mythingスクリプトを実行する前/後にUpstartジョブが開始される場合があります。したがって、スタートアップ管理サービスに依存するとすぐに、スタートアップジョブが必要になります。
-SpamapS

2
ハックとして、特定のランレベルから初期化スクリプトを削除し、代わりに/etc/init.d/myservice startto /etc/rc.localなどの行を正しい順序で追加することができます。これにより、Upstart initスクリプトによって開始されたサービスを含む他のすべてのサービスの後に、サービスが最後に起動することが保証されます。
ライアンC.トンプソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.