0

注: Red Hat 6.7 を実行しています

マシンの起動時にサービスとしてプロセスを開始するように Linux init システムで構成されたサービスがあります。これは、コマンド ラインから次の 1 回限りの構成を行うことによって行われました。

ln -snf /home/me/bin/my_service /etc/init.d/my_service
chkconfig --add my_service
chkconfig --level 235 my_service on

OS が再起動すると、期待どおりにサービスが開始されます。

サービス (my_service) がクラッシュした場合は、サービスを再起動する必要もあります。私が読んだことから、私がする必要があるのは、次のようなエントリを /etc/inittab に追加することだけです:

mysvc:235:respawn:/home/me/bin/my_service_starter

my_service_starter は次のようになります。

#!/bin/bash
/home/me/bin/my_service start

私の理解では、init システムが my_service が実行されていないことを検出すると、「my_service_starter」を実行して再起動しようとします。

ただし、これは機能していないようです。

サービスがクラッシュしたときにサービスを再起動するように Linux init システムに指示する方法を理解する必要があります。

4

2 に答える 2

2

次のようなエントリがある場合:

mysvc:235:respawn:/home/me/bin/my_service_starter

次に、inittab は次のようになります。

  1. 電話/home/me/bin/my_service_starter
  2. を呼び出す/home/me/bin/my_service start
  3. ...そして終了initすると、サービスが失敗します
  4. だからまたinit電話/home/me/bin/my_service_starter する

...など、init はスクリプトの再生成が速すぎると判断し、その後は完全に無視します。

inittab によって開始されたプロセスが終了することは想定されていません。本当に inittab を使用してサービスを維持したい場合は、 を削除する /etc/init.d/my_serviceと、次の/etc/inittabようになります。

mysvc:235:respawn:/home/me/bin/my_service

また、フォアグラウンドで実行されることを確認する必要がありますmy_service(一部のプログラムはデフォルトで自動的にデーモン化しますが、これらには何らかの--run-in-foregroundフラグが設定されていることがよくあります)。

systemd を使用して CentOS 7 などにアップグレードすると、すべてが簡単になります。

CentOS 6 でのプロセスの監視/再起動に使用できる「supervisord」や「runit」などの「サードパーティ」プロセス スーパーバイザーを調査することもできます。

アップデート

mangotang が指摘しているように、私は忘れていましたが、RHEL 6 は SysV スタイルの init スクリプトのみを使用していましたが、実際には upstart で出荷されました。したがって、より良い解決策は、代わりにupstartサービスを作成することです. hereには、適切な入門ドキュメントがいくつかあります。

于 2016-09-09T15:10:14.030 に答える
1

RHEL 6.X では、/etc/inittab ファイルの先頭に次のように表示されます。

# inittab is only used by upstart for the default runlevel. 
# 
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM

RHEL 6.X は、System V init システムの代わりに Upstart を使用します。initctl(8) および initctl(5) のマニュアル ページを参照するか、Upstart について Google に問い合わせてください。

于 2016-09-09T23:41:56.190 に答える