나는 busybox와 함께 임베디드 Linux를 사용하고 있습니다. "myApplication"(시작 후 실행 수준 5, 모든 서비스가 시작됨)이라는 응용 프로그램을 자동으로 실행하고 싶습니다.
지금까지 내가 한 일:
- /etc/init.d/ 아래에 S90myscript라는 스크립트를 만들었습니다.
- 그런 다음 inittab에 다음 줄을 추가했습니다.
::sysinit:/etc/init.d/S90myscript
스크립트에는 다음이 포함됩니다.
! /bin/sh
### BEGIN INIT INFO
# Provides: myApplication
# Should-Start: $all
# Required-Start: $remote_fs $network $local_fs
# Required-Stop: $remote_fs
# Default-Start: 5
# Default-Stop: 0 6
# Short-Description: start myprogram at boot time
### END INIT INFO
#
set -e
. /lib/lsb/init-functions
PATH=/root:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/sbin
PROGRAMNAME="myApplication"
case "$1" in
start)
$PROGRAMNAME
;;
stop)
skill $PROGRAMNAME
;;
esac
exit 0
내가 뭐 놓친 거 없니? 심볼릭 링크? 내가 뭐 잘못 했어요?
미리 감사드립니다
답변1
해결책을 찾았습니다.
- 나는
myApplication
넣었다/usr/sbin/
- 다음 위치에 있는 스크립트에 myApp이라는 심볼릭 링크를 생성했습니다 ( 해당 스크립트에서 실행
/etc/init.d/S99myAppScript
해야 하는 .sh가 없다는 점에 유의하세요 ).sudo chmod 755
명령 앞의 파일 끝에
rcS
다음 줄을 추가했습니다 ./etc/init.d/
done
myApp &
시스템을 다시 시작하면 myApplication이 자동으로 실행됩니다.
답변2
- 어디든 신청서를 배치하세요. 제 경우에는 전체 경로가 /root/myApplication입니다.
- /etc/init.d의 모든 init 스크립트는 번호순으로 하나씩 실행됩니다. 따라서 스크립트 이름을 S99myAppScript 또는 S98myAppScript로 설정하는 것이 가장 좋습니다. 다른 모든 스크립트 이후에 내 스크립트를 실행하고 싶기 때문입니다.
#!/bin/sh
# see about BusyBox init https://www.halolinux.us/embedded-systems/busybox-init.html
# Make sure the application exists
[ -f /root/myApplication ] || exit 0
umask 077
start() {
echo "Start application:"
/root/myApplication & # <-- Don't forget the "&" otherwise other system stuff won't start until you leave your app !!!
}
stop() {
killall -q myApplication
}
restart() {
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
restart
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit $?
바라보다반품.
- 컴퓨터를 다시 시작하거나 종료할 수 없는 이유는 무엇입니까? 정전을 방지하기 위해 프로그램을 자동으로 실행합니다.
애플리케이션을 종료할 때까지 "&" 또는 기타 시스템 항목이 시작되지 않는다는 점을 잊지 마세요!