V2ray-core: 在Openwrt x86_64上后台运行导致无法重启

Created on 9 Jun 2019  ·  6Comments  ·  Source: v2ray/v2ray-core

v2ray 4.19.1
很奇怪的一个问题,在openwrt x86_64版本里面使用
在rc.local里面加入v2ray -config=/etc/config/v2ray.pb &开机无法启动
在rc.local里面加入v2ray -config=/etc/config/v2ray.pb开机可以启动
但是此时reboot命令完全无效,必须手动killall -9 v2ray把进程杀掉才能重启

"inbounds": [
  {
    "tag": "tg-in",
    "port": *****,
    "protocol": "mtproto",
    "settings": {
      "users": [{"secret": "*******************"}]
    }
  }
],
"outbounds": [
  {
    "tag": "tg-out",
    "protocol": "mtproto",
    "settings": {}
  }
],
"routing": {
  "rules": [
    {
      "type": "field",
      "inboundTag": [
        "tg-in"
      ],
      "outboundTag": "tg-out"
    }
  ]
}

Most helpful comment

我回家后,做了一下测试。 路由器系统的开机脚本有很多挺奇怪的地方被我发现。
你的新给出的命令,在我的机子上成功了一次,第二次重启v2ray又没有启动起来。
然后我发现,路由器网页设置的开机执行的命令行,和SSH控制台上直接执行的命令行,竟然有不一样的效果。
绕过了几个坑之后,我重启N次后弄出来的,输入进网页界面的最终命令行是:

(sleep 20 && (cd /jffs/v2ray && ./v2ray) &)

解释:
第一个坑是sleep 20。因为路由器各个组件启动得慢,如果不加它,有一半几率启动失败。(路由器上装的很多第三方软件,transmissionbt等,启动脚本内都默认自带20~30秒的启动延迟)

第二个坑是cd路径行。我常常不小心就因为引用geoip等文件缺失错误,导致启动失败。用这行彻底解决它。

第三个坑是./v2ray这个命令。 在SSH控制台内手动输入命令v2ray,shell会优先判断v2ray是一个“可执行文件”,能成功运行。 但如果在网页内的启动界面设置启动命令,shell会优先把v2ray这个文件当作“脚本”,执行了类似于sh v2ray这个命令,结果失败。 改成linux更标准的./v2ray命令后,shell跳过了系统路径查找等步骤,就能判断成功并顺利运行了。。。。。很诡异。

第四个坑是整体括号,主要是让sleep 20时,其他系统组件可以继续加载。否则整个系统都在等待这个20秒,那就相当于没有效果了。

All 6 comments

我遇到类似问题。 后来发现,是我的启动v2ray的脚本有一个简单的“监控”功能,就是如果v2ray崩溃了,脚本就会自动再启动它。 然后路由器关机时,就出现循环: 系统关掉v2ray,脚本以为它闪退所以再次启动v2ray,然后系统再杀v2ray,然后脚本再次启动它。。。。。。。然后因为路由器比较慢,系统一直没有机会杀掉脚本自身,导致永远无法关机。

哦,我看了一下你的启动脚本。 你直接运行把系统的shell挂住了。。。。
请使用命令: nohup /jffs/v2ray/v2ray.start & 来开启v2ray。 nohup会让软件在另外打开的一个shell中运行,不会把系统进程给挂住。

@Kylejustknows 非常感谢!
但是我还是有一点不明白,为何
v2ray -config=/etc/config/v2ray.pb &
无法开机启动,但是开机之后手动运行就可以运行
如果可能的话,请赐教。。。

P.S. (v2ray -config=/etc/config/v2ray.pb &) 2>&1 > /tmp/v2ray.log也可以启动

我回家后,做了一下测试。 路由器系统的开机脚本有很多挺奇怪的地方被我发现。
你的新给出的命令,在我的机子上成功了一次,第二次重启v2ray又没有启动起来。
然后我发现,路由器网页设置的开机执行的命令行,和SSH控制台上直接执行的命令行,竟然有不一样的效果。
绕过了几个坑之后,我重启N次后弄出来的,输入进网页界面的最终命令行是:

(sleep 20 && (cd /jffs/v2ray && ./v2ray) &)

解释:
第一个坑是sleep 20。因为路由器各个组件启动得慢,如果不加它,有一半几率启动失败。(路由器上装的很多第三方软件,transmissionbt等,启动脚本内都默认自带20~30秒的启动延迟)

第二个坑是cd路径行。我常常不小心就因为引用geoip等文件缺失错误,导致启动失败。用这行彻底解决它。

第三个坑是./v2ray这个命令。 在SSH控制台内手动输入命令v2ray,shell会优先判断v2ray是一个“可执行文件”,能成功运行。 但如果在网页内的启动界面设置启动命令,shell会优先把v2ray这个文件当作“脚本”,执行了类似于sh v2ray这个命令,结果失败。 改成linux更标准的./v2ray命令后,shell跳过了系统路径查找等步骤,就能判断成功并顺利运行了。。。。。很诡异。

第四个坑是整体括号,主要是让sleep 20时,其他系统组件可以继续加载。否则整个系统都在等待这个20秒,那就相当于没有效果了。

@Kylejustknows 非常感谢你的耐心测试和解惑!
这里坑实在太多😓

BusyBox v1.31.0 () built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt SNAPSHOT, r10896-f522047958
 -----------------------------------------------------

```shell
root@Beijing:~# /etc/config/v2ray/v2ray -version
V2Ray 4.20.0 (V2Fly, a community-driven edition of V2Ray.) Custom
A unified platform for anti-censorship.

@terrytw 我遇到了同样的问题,后来发现是rc.local脚本的v2ray启动命令导致的。不过我最后解决代码是
` /etc/config/v2ray/v2ray -config  /etc/config/v2ray/config.json > /dev/null 2>&1 &`

@Kylejustknows 中间我尝试过nohup使其后台运行,但是一直失败,后来发现我的环境上是没nohup命令
```shell
root@Beijing:~# nohup --help
-ash: nohup: not found

而去掉nohup能成功挂起后台运行。

Was this page helpful?
0 / 5 - 0 ratings