我正在使用带有 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 $?
看还。
- 为什么我无法重新启动或关闭计算机?自动运行程序防止断电。
不要忘记“&”,否则其他系统内容将不会启动,直到您离开应用程序!