openwrt 下创建开机自启服务失败

2019-03-04 21:35:57 +08:00
 vinsec

openwrt 的开机自启的机制是:

创建 /etc/init.d/[service]

这个 service 本质是一个脚本,会重载/etc/rc.common 里的启停函数(应该可以这样理解)

脚本里面标注 START STOP 的值,会被认定为该服务的优先级。

然后就可以通过 service [service_name] start/stop 来启停服务

最后 service [service_name] enable 就会创建 /etc/rc.d/S50uhttpd --> /etc/init.d/uhttpd 的软链接

最后,该服务就会根据优先级进行开机启动


现在的问题是,写了了一个简单的服务,大致是:

#!/bin/sh /etc/rc.common
# Example script
# Copyright (C) 2007 OpenWrt.org
 
START=55
STOP=55
 
start() {    
	echo start
   /usr/sbin/xxxx -a -b -c
}                 
 
stop() {
	echo stop
	/usr/bin/killall [service_name] 
}

boot() {
	echo boot
	start
}

脚本也加了执行权限和 enable 了,也能看到软链接。但是就是无法开机启动。日志也无法排查,不知道是什么情况?

2287 次点击
所在节点    问与答
6 条回复
vinsec
2019-03-04 22:19:55 +08:00
是不是 17.01.5 版本的 op 只支持 procd 风格的 init 脚本
ysc3839
2019-03-04 22:43:06 +08:00
脚本里用 logger -t [service_name] [log_msg] 记录到系统日志,看看有没有成功启动。
vinsec
2019-03-04 22:52:14 +08:00
@ysc3839 我是 SSH 进去看进程有没有启动的,不过脚本怎么改都没用。
我找出原因了。OP 新版本必须使用 procd 语法风格的脚本才能创建自启服务。
官网链接: https://openwrt.org/docs/guide-developer/procd-init-scripts
ysc3839
2019-03-04 23:03:44 +08:00
@vinsec 我要你这么做的目的是确认脚本是否有执行,排除目标程序启动后退出的情况。
只支持 procd 是错误的,我目前使用的 18.06.1 中的 /etc/init.d/boot 就没有使用。
vinsec
2019-03-04 23:10:29 +08:00
@ysc3839 我明天试一下再来回复。我没有看 boot,不过 init.d 下的其他服务基本都是 procd 写的,可能结论下早了。
paradislover
2019-03-05 09:27:18 +08:00
运行下 /etc/init.d/ucitrack

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/541046

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX