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