UNIXプロセスを監視するDaemontools(djbtools)の代わりに?


26

Daemontoolsを使用して、サーバー上のUnixサービスを監視するシンプルで信頼できる方法を提供しました。それはうまく機能しますが、異なる考え方(The DJB Way)を必要とし、いくつかの一般的な不満は次のとおりです

  • TAI64Nベースのタイムスタンプ
  • /etc/init.d(または(/usr/local)/etc/rc.d)にスクリプトを保存しません
  • apachectlのようなスクリプトで常に機能するとは限りません。一部のスクリプトを書き直す必要があります。

似たような「スーパーバイザー/ウォッチドッグ」デーモンが約2年前に動作していたことを覚えていますが、まだ少し荒っぽいものもありました。

Daemontoolsから別のものに切り替えた場合、何を選択し、うまく機能しましたか?RedHatまたはUbuntuには、デフォルトでプロセス監視ユーティリティが付属していますか?

回答:


16

Hrm、Ubuntuを使用している場合、新しいinitプロセスであるupstartには、プロセス監視のレベルが含まれています。SysV initスクリプトであるサービスの標準的な開始と停止に使用できます。また、実行中のアプリケーションを監視し、それらが死んだ場合にそれらを再生成することもできます。

ニーズに応じて、inittabを介して貧乏人のプロセスリスタータを実装することもできます。

主にプロセスを監視し、常に実行されていることを確認し、実行されていないときに再起動するものを探している場合は、restartedでうまくいきました。残念ながら、私が知っている唯一のソースはDebianパッケージです。ただし、これは非常に小さくてシンプルなアプリケーションであり、基本的にはmakeファイルを備えた単一の.cおよび.hファイルのみです。Red HatのDebianソースtarballからコンパイルするのは簡単です(以前の仕事でRPMを作成しました)。

私が聞いたが、使用されていない最後のオプションはSupervisorです。有望なツールのように見えますが、再起動は過去に私にとって十分に機能していました。


12

runitの場合は+1。daemontoolsよりも多くの機能と柔軟性があり、既存のdaemontools引数とオプションと互換性があります。きれいです。

しかし、あなたが言及したように、多くのツールには独自の制御バイナリ、apache2ctl、ejabberdctl、poundctl、collectdなどが付属しています。可能な実装。私は通常妥協し、ほとんどのサービスをrunitの監督下で実行しています。そして、他の人は些細な方法を使用して実行することができます。


1
+1のrunsvコマンドrunitはカスタムコントロールをサポートしているため、デーモンのネイティブコントロールバイナリの観点から再起動を実装できることに注意してください。
巡礼

4

まあ、runitがあります。デーモンツールとの違いや類似点を説明することはできませんが、Berstein風のWebサイトから判断すると、明確なBernsteinの影響があると思います。


2
SysVInitアレンジメントにドロップして、/ etc / init.d / <scriptname>をかなり透過的に引き継ぐことができることを考えると、私の投票はrunitに対するものです。
エイブリーペイン


4

すでに述べたようにする代わりにdaemonizeしてdaemontools、そこにあるデーモン libslackパッケージのコマンドが。

daemon 非常に構成可能であり、自動再起動、ロギング、pidfile処理などのすべての退屈なデーモンを気にします。



3

Cで記述され、さまざまな(Unix)プラットフォームで使用可能なlibslackのデーモンツールもあります。

それは非常に構成可能であり、自動再起動、ロギング、pidfile処理などのすべての退屈なデーモンを気にします。


2

UbuntuにはUpstartが付属しています-私はそれについてあまり知りませんが、「スーパーバイザー」機能があることは知っています。Appleのlaunchdは別のオプションです(Wikipediaの記事には、UpstartやRunItを含む他の多くの項目もリストした素敵な「参照」セクションがあります)。

それらのすべてには良い点とユーバーサックの特別なブランドがあります-「プロセススーパーバイザー」/「ウォッチドッグ」プログラムについて誰かが私に尋ねるたびに、私はいつも同じ質問をします。


-2

この道を行く誰もが行き止まりに気づいているので、このための人気のある/コミュニティ合意のツールはありません。長時間実行しているプロセスが頻繁に失敗して単純な監視で十分に機能しない場合は、それらの使用を停止し、イベント駆動型のコード内にコードを移動します。

編集:クリスが以下に指摘するように、あなたは完全に追い詰められることがあります。この場合、プロセス/ pidファイルを探し、欠落している場合は開始/再起動を実行し、結果を責任者に電子メールで出力する* / 1 cronジョブdeveloper / product-managerがあなたの予備役です。


3
言うよりも簡単です。;-)アプリケーションの不安定性や安っぽさに関係なく、実行を強制されることがあります。また、アプリケーションを実行し続けるためにできることは、午前3時の電話を減らすのに役立ちます。決して理想的ではありませんが、時にはそれが得られるほど良いこともあります。
クリストファーキャシェル

1
これは、プロセッサスーパーバイザの2つの機能を見逃してしまいます。プロセスのグループを単一のユニットとして管理する機能と、依存関係を管理する機能です。たとえば、Webサイトには、Webサーバー、データベースサーバー、および外部プロセスとして実行されているいくつかのWebアプリケーションが含まれる場合があります。これらのプロセスには依存関係がある場合があります。たとえば、Webアプリケーションの前にデータベースを起動する必要があります。優れたプロセススーパーバイザーを使用すると、1つのコマンドでこのプロセスグループを開始および停止でき、正しい順序で起動するようになります。
ラースク

1
理想的な世界では、すべてが完璧に機能します。残念ながら、これは理想的な世界ではありません。
マット

問題が頻繁に失敗することはありません。問題は1週間に1回失敗し、すぐには再開されません。これは本当の答えではありません。
dan3

@ChristopherCashellは正しい軌道に乗っています。アプリの監視は通常、過剰なエンジニアリングです(また、たまたまUNIX哲学ではありません)。すべてのクラッシュを修正するためにいくら積極的な努力が注がれても、ソフトウェアは常に不完全であると想定できます。監督は、明確な外部層であり、保険証券です。実稼働サービスは「クラッシュするはずがない」としても、現実は起こるので、何があっても本番サービスを維持する方が良いです。サービスを再起動し、例外をログに記録して、午前中に修正したいです。(サービスのフラッピングを考慮する別のケースです。)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.