GNU/Linux >> Linux の 問題 >  >> Linux

失敗した場合にLinuxバックグラウンドプロセスを自動的に再起動する方法は?

Buildroot には 3 つの初期化システムがあるため、これを行うには 3 つの方法があります:

BusyBox init

これにより、 /etc/inittab にエントリが追加されます .

::respawn:/bin/myprocess

BusyBox init に注意してください 特異な /etc/inittab を持っています フォーマット。 2 番目のフィールドは意味がなく、最初のフィールドは ID ではありません ただし、デバイスのベース名です。

Linux "System V" init

ここでも、/etc/inittab にエントリを追加します。 .

myprocess:2345:respawn:/bin/myprocess

systemd

たとえば、ユニットファイルを /etc/systemd/system/myprocess.service に書き込みます :

[Unit]
Description=My Process

[Service]
ExecStart=/bin/myprocess
Restart=always

[Install]
WantedBy=multi-user.target

これを有効にして、起動時に自動起動します:

systemctl enable myprocess.service

手動で開始:

systemctl start myprocess.service

さらに読む

  • 「3.1.3 初期化システム」. Buildroot ユーザー マニュアル .

常に同じプロセスを呼び出すループを持つサブシェルを作成するのはどうですか?

終了すると、ループの次の反復が続行され、再び開始されます。

(while true; do 
    /bin/myprocess
done) &

サブシェルが死んだ場合、それは終わりです。その場合の唯一の可能性は、プロセスが生きているかどうかをチェックする別のプロセス (ネクロマンサーと呼びます) を作成し、そうでない場合は開始し、このネクロマンサーを cron で実行して、定期的にチェックできるようにすることです。 /P>

次のステップは、cron が死んだらどうなるかということですが、ある時点で安心して心配するのをやめるべきです。


最も簡単な方法は、このようなことを行うように設計された /etc/inittab に追加することです:

<ブロック引用>

リスポーン プロセスが存在しない場合は、プロセスを開始します。その終了を待ちません (/etc/inittab ファイルのスキャンを続行します)。プロセスが終了したら、プロセスを再起動します。プロセスが存在する場合は、何もせずに /etc/inittab ファイルのスキャンを続行します。

たとえば、次のようにできます:

# Run my stuff
myprocess:2345:respawn:/bin/myprocess

Linux
  1. Linuxで実行中のプロセスを再起動(またはリセット)する方法は?

  2. 自動的に供給されるシェルスクリプトを/etc/ profileに書き込む方法は?

  3. / etc / motdはどのように更新されますか?

  1. Linux - すべてのユーザーを一覧表示する方法

  2. プロセスが実行されているフォルダーを見つける方法は?

  3. Linux /etc/security/limits.conf 説明

  1. Linux のプロセスごとの swapiness を設定するには?

  2. /etc/issues をセットアップして eth0 の IP アドレスを表示する方法

  3. Linux で障害時にサービスを自動的に再起動する方法