找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 6578|回复: 16

OpenWRT开机自动启动软件失败!!

[复制链接]
发表于 2024-1-1 18:23 | 显示全部楼层 |阅读模式
本来以为是个简单的问题,没想到弄了几天没搞定:

目标:开机(延时)启动软件pigchacli并使用上次设置,命令:/usr/bin/pigchacli --start

方法一:在/etc/rc.local中,exit 0前面加上/usr/bin/pigchacli --start或者/usr/bin/pigchacli --start &


结果:此方法无效

方法二:

vi /etc/init.d/runpicha

#!/bin/sh /etc/rc.common
START=99

SERVICE_USE_PID=1
SERVICE_WRITE_PID=1
SERVICE_DAEMONIZE=1

start() {
       service_start /usr/bin/pigchacli --start
}

stop() {
        service_stop /usr/bin/pigchacli --stop
}


赋予runpigcha执行权限后 /etc/init.d/runpigcha enable 在/etc/rc.d/建立了S99runpigcha软链接,
reboot重启后,luci界面-系统-启动项-启动脚本中可以看到runpigcha并可以手动执行启动停止重启等操作,但就是不能开机自动运行。在start函数里直接放/usr/bin/pigchacli --start或者/usr/bin/pigchacli --start &也不行,不知道问题出在哪里了,请大佬指教。

发表于 2024-1-1 19:02 | 显示全部楼层
你是不是用了扩展的overlay ?
或许系统启动的时候,
这个overlay还没有加载,

然后你的程序就无法被执行…

要不要改为  
sleep 66 && /usr/bin/your-app

试试看?

点评

我是小白,不太懂,我用的是237大佬的固件,然后这个延时启动我试了延时40秒不行,难道需要更久一点吗?我再试试,谢谢  详情 回复 发表于 2024-1-1 19:57
回复 支持 反对

使用道具 举报

发表于 2024-1-1 19:24 | 显示全部楼层
本帖最后由 superzjg 于 2024-1-1 20:02 编辑

我也见过类似情况,普通start开机无法启动,手动却可以。后来使用 procd 方式启动就可以了,修改一下/etc/init.d/runpicha
简单的示例:
  1. #!/bin/sh /etc/rc.common

  2. START=99
  3. USE_PROCD=1   #使用procd
  4. bin_file=/usr/bin/pigchacli

  5. start_service() {  
  6.         procd_open_instance
  7.         procd_set_param command $bin_file
  8.         procd_append_param command --start
  9.         procd_set_param respawn
  10.         procd_close_instance
  11. }
  12. stop_service() {  
  13.         #停止服务前的其他代码
  14. }
复制代码

完整procd参考:https://openwrt.org/docs/guide-developer/procd-init-scripts


点评

先感谢!我不太懂,直接复制粘贴了你的代码,还是不行,这次luci里手动也不能启动了,然后我把“procd_append_param command --start”改成“procd_append_param command $bin_file --start”(也许根本不是那么回事  详情 回复 发表于 2024-1-1 20:10
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-1 19:57 | 显示全部楼层
gaze 发表于 2024-1-1 19:02
你是不是用了扩展的overlay ?
或许系统启动的时候,
这个overlay还没有加载,

我是小白,不太懂,我用的是237大佬的固件,然后这个延时启动我试了延时40秒不行,难道需要更久一点吗?我再试试,谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-1 20:10 | 显示全部楼层
superzjg 发表于 2024-1-1 19:24
我也见过类似情况,普通start开机无法启动,手动却可以。后来使用 procd 方式启动就可以了,修改一下/etc/i ...

先感谢!我不太懂,直接复制粘贴了你的代码,还是不行,这次luci里手动也不能启动了,然后我把“procd_append_param command --start”改成“procd_append_param command $bin_file --start”(也许根本不是那么回事。。)也不行,手动也开启不了。
这openwrt这么麻烦,Ubuntu里systemctl很稳定,到这不支持了

点评

应该是尝试删除 procd_append_param command,但必须要procd_set_param command 可以写成 procd_set_param command $bin_file --start 也试试。 只要一个start_service函数,把stop_service函数删除(不能保留空代  详情 回复 发表于 2024-1-1 20:37
回复 支持 反对

使用道具 举报

发表于 2024-1-1 20:37 | 显示全部楼层
本帖最后由 superzjg 于 2024-1-1 20:43 编辑
13937812296 发表于 2024-1-1 20:10
先感谢!我不太懂,直接复制粘贴了你的代码,还是不行,这次luci里手动也不能启动了,然后我把“procd_ap ...

应该是尝试删除 procd_append_param command,但必须要procd_set_param command

可以写成 procd_set_param command $bin_file --start 。
只要一个start_service函数,把stop_service函数删除(不能保留空代码函数)还要注意procd开启后不能再使用start()函数 stop()函数这种写法,新手容易混淆

启动还是用 /etc/init.d/runpicha start(或 stop 或 reload)

觉得麻烦是你不熟悉,procd 基本可启动所有程序以及进程守护

点评

精简/etc/init.d/runpigcha代码为 #!/bin/sh /etc/rc.common START=99 USE_PROCD=1 start_service() { procd_open_instance procd_set_param command /usr/bin/pigchacli --start procd  详情 回复 发表于 2024-1-1 23:02
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-1 23:02 | 显示全部楼层
superzjg 发表于 2024-1-1 20:37
应该是尝试删除 procd_append_param command,但必须要procd_set_param command

可以写成 procd_set_par ...

精简/etc/init.d/runpigcha代码为

#!/bin/sh /etc/rc.common
START=99
USE_PROCD=1

start_service() {  
        procd_open_instance
        procd_set_param command /usr/bin/pigchacli --start
        procd_set_param respawn
        procd_close_instance
}

还是不行,甚至不能手动start/stop,不知道什么原因。不使用procd能手动但不能自启动,用procd完全不能启动脚本,真是奇了怪了,我看系统内置大部分都用的procd
回复 支持 反对

使用道具 举报

发表于 2024-1-1 23:17 | 显示全部楼层
麻烦你/usr/bin/pigchacli  --help看看人家到底应该怎么运行吧

点评

官方文档看好多遍了,运行就一条命令/usr/bin/pigchacli --start openwrt自启动就是让改/etc/rc.local,根本不行  详情 回复 发表于 2024-1-1 23:51
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-1 23:51 | 显示全部楼层
wulishui 发表于 2024-1-1 23:17
麻烦你/usr/bin/pigchacli  --help看看人家到底应该怎么运行吧

官方文档看好多遍了,运行就一条命令/usr/bin/pigchacli --start
openwrt自启动就是让改/etc/rc.local,根本不行

点评

你是 a53架构的吧,把 bin 发给我测试一下,我手上有个QWRT固件 另外楼上有兄弟提到的编码,也要注意,尤其是在windows编辑脚本,换行符不能是 windows(CRLF);必须改成 unix(LF),否则运行可能出错,这坑我也踩过  详情 回复 发表于 2024-1-2 09:41
回复 支持 反对

使用道具 举报

发表于 2024-1-2 00:28 | 显示全部楼层
23系列(或更早或之后)发现有部分启动脚本不能启动的问题,这些启动脚本在18/19/21都毫无问题,经过呕心沥血一一排查发现根本不是脚本有错误,而是完全莫名其妙,每个脚本需要修改的地方都不同。
很久之前发现过问题,脚本不能开机启动,开机后你随便打开加个空格,又能手动启动,但是重启又不能启动,折腾大半天完全搞不懂,你恨不得把这玩意砸了。
最后发现这个脚本不是linux的编码格式:你复制全部内容,在linux里面新建立一个文件保存,你会发现文件大小不同(就是因为这个操作最终发现了问题)。
所以你要把系统自带的一个脚本复制出来,改名,然后复制进去,再编辑,这样可以保证万无一失,千万不要在windows里面建立文件再复制进去。

点评

我觉得你说的很有道理,我弄几天了差点没砸机器,现在想想好像就是在windows下新建的文本文档改名上传的。。。。。。 回家按你说的试试,谢谢!  详情 回复 发表于 2024-1-2 10:04
回复 支持 反对

使用道具 举报

发表于 2024-1-2 09:41 | 显示全部楼层
13937812296 发表于 2024-1-1 23:51
官方文档看好多遍了,运行就一条命令/usr/bin/pigchacli --start
openwrt自启动就是让改/etc/rc.local,根 ...

你是 a53架构的吧,把 bin 发给我测试一下,我手上有个QWRT固件

另外楼上有兄弟提到的编码,也要注意,尤其是在windows编辑脚本,换行符不能是 windows(CRLF);必须改成 unix(LF),否则运行可能出错,这坑我也踩过。

点评

是A53,移动路由器RAX3000M。但我不知道你说的bin是啥 脚本代码里没有使用“/n”之类的转义字符,写脚本换行的时候都是用的回车。。。  详情 回复 发表于 2024-1-2 10:16
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-2 10:04 | 显示全部楼层
wulishui 发表于 2024-1-2 00:28
23系列(或更早或之后)发现有部分启动脚本不能启动的问题,这些启动脚本在18/19/21都毫无问题,经过呕心沥 ...

我觉得你说的很有道理,我弄几天了差点没砸机器,现在想想好像就是在windows下新建的文本文档改名上传的。。。。。。
回家按你说的试试,谢谢!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-2 10:16 | 显示全部楼层
superzjg 发表于 2024-1-2 09:41
你是 a53架构的吧,把 bin 发给我测试一下,我手上有个QWRT固件

另外楼上有兄弟提到的编码,也要注意, ...

是A53,移动路由器RAX3000M。但我不知道你说的bin是啥
脚本代码里没有使用“/n”之类的转义字符,写脚本换行的时候都是用的回车。。。

点评

回车 在windows的定义 和 linux 不一样,你用 记事本 打开脚本,可以看到 右下角 附近会有换行符标识,那里必须是 Unix(LF). bin 就是你运行的二进制可执行文件啊  详情 回复 发表于 2024-1-2 10:23
回复 支持 反对

使用道具 举报

发表于 2024-1-2 10:23 | 显示全部楼层
本帖最后由 superzjg 于 2024-1-2 10:25 编辑
13937812296 发表于 2024-1-2 10:16
是A53,移动路由器RAX3000M。但我不知道你说的bin是啥
脚本代码里没有使用“/n”之类的转义字符,写脚本 ...

回车 在windows的定义 和 linux 不一样,你用 记事本 打开脚本,可以看到 右下角 附近会有换行符标识,那里必须是 Unix(LF),不能是windows(CRLF)

bin 就是你运行的二进制可执行文件啊

点评

抓狂了,大佬们提醒的环节都注意到了,还是不能自启动,只能手动启停。 如果用procd方式的脚本,直接连手动也启动不来。。。。 附上bin文件,请大佬凑空帮忙调试,多谢 http://120.232.233.27:8080/linux/pigchacli_  详情 回复 发表于 2024-1-2 22:03
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-2 22:03 来自手机 | 显示全部楼层
superzjg 发表于 2024-1-2 10:23
回车 在windows的定义 和 linux 不一样,你用 记事本 打开脚本,可以看到 右下角 附近会有换行符标识,那 ...

抓狂了,大佬们提醒的环节都注意到了,还是不能自启动,只能手动启停。
如果用procd方式的脚本,直接连手动也启动不来。。。。
附上bin文件,请大佬凑空帮忙调试,多谢
http://120.232.233.27:8080/linux/pigchacli_aarch64

点评

 不用那么复杂。 这个问题的原因是rc.local环境变量没有初始完成,导致pigchacli找不到/root/.config/配置。 在rc.local中强制以root身份login并执行脚本就可以了。 简单说来,就是在/etc/rc.local中添加如下命令  详情 回复 发表于 2024-4-6 13:48
简单测试了,可以运行,但是因为缺少配置文件,运行后会马上退出。我不晓得如何编写配置文件,未进一步测试。 附上测试脚本 和 运行日志:  详情 回复 发表于 2024-1-3 09:21
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-7-4 15:04

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com

快速回复 返回顶部 返回列表