Openwrt 路由设置(四):启动脚本
一、OpenWRT 启动脚本说明
OpenWRT的启动脚本放在 /etc/init.d
目录下,新建的脚本放在这里,并须要 chmod +x
赋予执行权。
OpenWRT开机时会自动运行 /etc/rc.d
目录下的脚本。注意不运行 /etc/init.d
里的。
/etc/rc.d
目录下有 /etc/init.d
目录下脚本的链接文件。
执行:
$ /etc/init.d/nnaammee enable
# 或者
$ service nnaammee enable
当以 enable
参数调用启动脚本时,系统会创建一个该脚本文件的链接(例如S95nnaammee、K10nnaammee),放在 /etc/rc.d/
目录下。
相当于运行了
$ ln -s /etc/init.d/nnaammee /etc/rc.d/S95nnaammee
和
$ ln -s /etc/init.d/nnaammee /etc/rc.d/K10nnaammee
此外,当以
disable
参数调用脚本时,系统会删除该两个软链接。
软链接文件名是在脚本名前添加S95
,数字代表启动前后,越小越靠前启动。相同时按照名字字母顺序。
开机的时候会按照数字从小到大执行S开头的脚本来启动对应的程序;
关机的时候会按照数字从小到大执行K开头的脚本来关闭对应的程序。
数字范围是1-99。
二、基础模板
#!/bin/sh /etc/rc.common
# "new(er)" style init script
# include the common ‘run commands’ file /etc/rc.common needed for a service.
# Look at /lib/functions/service.sh on a running system for explanations of what other SERVICE_
# options you can use, and when you might want them.
# openwrt支持旧的init scripts和新的procd scripts。USE_PROCD=1 此flag声明使用procd scripts。不建议设置。
START=95
STOP=10
APP=abc
SERVICE_WRITE_PID=1 # create a pid-file and use it for matching
SERVICE_USE_PID=1 # create its own pid-file and use it for matching
SERVICE_DAEMONIZE=1 # run in the background
# 必须有 start() 和 stop()
start() {
service_start /usr/bin/$APP
}
stop() {
service_stop /usr/bin/$APP
}
boot() {
echo "Hello world"
# 先执行自己的启动工作
# 略
start "$@" # 最后执行此命令,完成rc.common里预设的启动命令
}
shutdown() {
# The service is finished, so turn off the hardware
stop # 最先执行此命令,完成rc.common里预设的关闭命令
# 再执行自己的结束工作
# 略
}
EXTRA_COMMANDS="custom" # 可以添加自定义的commands
EXTRA_HELP=" custom Help " # 当用“脚本 + 此参数”运行时,显示此HELP内容。
custom() {
echo "custom command"
# do your custom job
}
start()
启动服务stop()
停止服务restart()
重启服务reload()
重新加载配置文件,如果失败则重启enable()
启动开机自启动disable()
禁用开机自启动boot()
有boot()时,系统启动调用boot()而不调用start()。shutdown()
有shutdown()时,系统关机/重启时调用shutdown()而不调用stop()。
因为在 /etc/rc.common
中已经定义了所有默认的函数,当我们没有重新实现这些函数时,程序会执行 /etc/rc.common
中的默认函数。假设没有自定义 restart
函数,程序将按照 /etc/rc.common
中的 restart
函数首先调用 stop
函数,再调用 start
函数。而一旦我们重新实现了这些函数,在执行时,程序就会调用我们自己实现的函数。
三、简单例子
#!/bin/sh /etc/rc.common
START=95
STOP=10
SERVICE_WRITE_PID=1
SERVICE_USE_PID=1
SERVICE_DAEMONIZE=1
start() {
service_start /usr/bin/caddy run -config /etc/caddy/Caddyfile
}
stop() {
service_stop /usr/bin/caddy
}
附:另自动启动方法
$ nohup appname -flag ... >/dev/null 2>&1 & # 手动启动,在后台运行。
$ ps | grep appname # 查看进程
$ kill -15 $(pidof appname) # 停止运行(SIGTERM)
或者
$ kill -9 $(pidof appname) # 强制停止运行(SIGKILL)
开机自动启动:在 /etc/rc.local
文件的 exit 0
之前,添加上述启动命令。
最后修改于 2024-02-24