저는 busybox를 init로 사용하는 임베디드 Linux 시스템을 개발 중입니다.
애플리케이션을 실행하려면 두 가지 요구 사항이 있습니다.
- 내 지원서는 가능한 한 빨리 시작되어야 합니다.
- 비지박스(종료 시 다시 생성)로 관리해야 합니다.
먼저 아래와 같이 /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
)했지만 두 번째 요구 사항을 충족하지 않습니다(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
내 지원 요구 사항을 충족할 수 있는 명확한 방법이 있는지 궁금합니다.