私はbusyboxをinitとして使用する組み込みLinuxシステムを開発しています。
アプリケーションを実行するには2つの要件があります。
- 私の申請書はできるだけ早く始める必要があります。
- ビジーボックス(終了時に再生成)で管理する必要があります。
まず、次のように/etc/inittabでアプリケーションを起動します。
# now run any rc scripts
::sysinit:/etc/init.d/rcS
# Put a getty on the serial port
#ttyS3::respawn:/sbin/getty -L ttyS3 57600 vt100 # GENERIC_SERIAL
#no login
::respawn:/usr/bin/myapp
::respawn:-/bin/sh
このようにしてmyappはbusyboxによって管理され、終了するとbusyboxが自動的に起動します。
しかし、myappを起動する前に、多くのサービス/デーモンが起動することがわかりました/etc/init.d/rcS
。これは最初の要件を満たしていません。
私のアプリを実行するために作成/etc/init.d/S02myapp
(で実行/etc/init.d/rcS
)しましたが、2番目の要件を満たしていません(Busyboxが実行しているアプリを管理できるかどうかrcS
)。
その後、以下のように両方の要件を満たす他の方法を見つけました。
- 変更し、
/etc/init.d/S02myapp
他のプロセスをmyapp.sh
バックグラウンドプロセスとして起動します。 - Create
myapp.sh
には、myappがフォアグラウンドプロセスで始まるwhileループがあります。
これにより、myappはできるだけ早く(startupによってrcS
)開始され、終了するとwhileループがmyapp.sh
再開されます。
ps ax
私はそれがうまくいくことを確認しましたが、この方法は次のようなものを示すので少し醜いと思います。
1539 root 0:00 {myapp.sh} /bin/sh /etc/init.d/myapp.sh
1544 root 0:00 /sbin/mdev -df
1545 root 1:21 myapp
私のサポート要件を満たすための明確な方法があるかどうか疑問に思います。