原理
#!/bin/sh /etc/rc.common指定了执行该脚本的方式(必须)
START=95 代表该脚本的启动顺序为95(注意,不是第95个执行的脚本,而是一个级别)。(数字越小,启动的越早)
start # 启动服务
stop # 停止服务
restart # 重启服务
reload # 重新载入配置文件, 如果失败则重启
enable # 启用开机自启动, 实际上是在/etc/rc.d/下创建 S95xx 和 K95xx 开头的软链
disable # 禁用开机自启动, 实际上是删除/etc/rc.d/下对应的软链
启动顺序
START= 和 STOP= 决定脚本启动时的次序. 启动时init.d会根据文件名顺序, 自动执行在/etc/rc.d中找到的脚本. 初始化脚本可以作为/etc/init.d/下文件的软链放置在/etc/rc.d/.
enable 和 disable 可以自动帮你创建对应的带序号的软链.
这个例子中START=10 会被链接到 /etc/rc.d/S10example, 启动时执行在START=9之后, 在START=11之前. 而STOP=15会被链接到 /etc/rc.d/K15example, 执行在STOP=14之后, 在STOP=16之前. 同一个启动数字的, 按字母顺序启动.
里面内容介绍
boot(),系统启动时会调用boot()
start_service()
stop_service()
restart()
procd风格的init启动
procd init脚本与sysv风格的启动脚本区别在于procd方式下, 服务必须以前台方式运行
#!/bin/sh /etc/rc.common
// procd 方式声明
USE_PROCD=1
创建文件:/etc/init.d/example
#!/bin/sh /etc/rc.common
# Example script
# Copyright (C) 2007 OpenWrt.org
# 执行的顺序,在/etc/rc.d目录下自动生成S98xxx,K98xxxx,按照顺序执行
START=98
STOP=98
# 使用procd启动
USE_PROCD=1
start() {
echo start
# commands to launch application
}
stop() {
echo stop
# commands to kill application
}
START=10
this means the file will be symlinked as /etc/rc.d/S10example - in other words, it will start after the init scripts with START=9 and below, but before START=11 and above.
STOP=15
this means the file will be symlinked as /etc/rc.d/K15example - this means it will be stopped after the init scripts with STOP=14 and below, but before STOP=16 and above. This is optional.
如果程序需要依赖其他服务,例如网卡,则需要在网卡之后启动,即 START 的数值要相对于网卡的值大,具体打多少需要试验下。
然后执行命令
/etc/init.d/example enable
并重新启动路由器
开启自动调用
ln -s /etc/init.d/done /etc/rc.d/S95done
删除软链接取消自动调用
或者
/etc/init.d/test enable
/etc/init.d/test disable