xray启动状态错误
[root@iZj6c3w6x7zccrjtzelfr8Z ~]# systemctl status xray
● xray.service - Xray Service
Loaded: loaded (/etc/systemd/system/xray.service; enabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/xray.service.d
└─10-donot_touch_single_conf.conf
Active: failed (Result: exit-code) since 二 2024-08-20 13:48:30 CST; 17s ago
Docs: https://github.com/xtls
Process: 7027 ExecStart=/usr/local/bin/xray run -config /usr/local/etc/xray/config.json (code=exited, status=23)
Main PID: 7027 (code=exited, status=23)
排错思路
使用journalctl -u xray.service -b --no-pager -n 50
查看xray日志,也显示错误码23
错误码报错 23 不出意外为配置文件存在问题
进入配置文件路径下 /usr/local/etc/xray ,将配置文件下载进本机编译软件(例如vscode)方便检查
下载好的配置文件发现有括号和路径错误,修改后重新上传进服务器配置文件路径 —— 在此排除配置文件格式问题
需要改动的内容为:
- “access”、"error"日志路径
- id ——改为 xray uuid 生成的 uuid
- 邮箱(可选)
上传回服务器后启动依然报错23,已确定不是配置文件json格式错误,那么有可能是路径找不到,使用 cat /var/log/xray/error.log
查看错误运行日志看看是否为路径问题
查看后发现错误日志为空,怀疑是配置文件路径有误
根据配置文件中的error.log路径,使用ssh路径可视化工具或ls/ll进入该路径下查看,发现可以找到日志文件 —— 在此排除配置文件路径问题
使用 /usr/local/bin/xray -test -config /usr/local/etc/xray/config.json
整体检查一遍配置文件
[root@iZj6c3w6x7zccrjtzelfr8Z xray]# /usr/local/bin/xray -test -config /usr/local/etc/xray/config.json
Xray 1.8.23 (Xray, Penetrates Everything.) 4c82ef8 (go1.22.5 linux/amd64)
A unified platform for anti-censorship.
2024/08/20 21:54:03 [Info] infra/conf/serial: Reading config: /usr/local/etc/xray/config.json
Configuration OK.
输出以上内容,说明配置文件没有问题
既然配置文件没问题,也搜过了各所需文件路径确实正确,那多半是因为权限问题导致配置文件中的证书等所需文件无法访问。
查看证书、日志权限后输出如下:
[root@iZj6c3w6x7zccrjtzelfr8Z xray]# ll /var/log/xray/
总用量 0
-rw--w--w- 1 nobody nobody 0 8月 18 16:11 access.log
-rw--w--w- 1 nobody nobody 0 8月 18 16:11 error.log
[root@iZj6c3w6x7zccrjtzelfr8Z xray]# ll /root/xray_cert/
总用量 16
-rwxr-xr-x 1 root root 317 8月 19 13:37 xray-cert-renew.sh
-rw-r--r-- 1 root root 274 8月 19 14:12 xray-cmd.txt
-rw-r--r-- 1 root root 2832 8月 19 13:26 xray.crt
-rw-r--r-- 1 root root 227 8月 19 13:26 xray.key
得出日志文件只对root用户有读权限
xray运行用户由service文件决定,为确保能享有最高权限,将运行用户改为root用户(按需修改)
#将第一行User=xxx注释掉,会默认使用root用户启动
[Service]
#User=nobody
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
NoNewPrivileges=true
ExecStart=/usr/local/bin/xray run -config /usr/local/etc/xray/config.json
Restart=on-failure
RestartPreventExitStatus=23
LimitNPROC=10000
LimitNOFILE=1000000
修改后依然报错23
向日志文件目录的上一级查看发现 log 目录下的 xray 用户组为原运行用户组,且对其他用户无任何权限(目录为:var/log/xray/xxx.log)
使用 chomd +ar 对xray文件夹添加所有用户的读权限
再次运行 config 文件,可以成功启动xray
省流
需检查的部分为以下几点:
- 配置文件 json 格式是否正确:括号问题+是否有注释( json配置文件不允许注释 )
- 所需文件路径是否正确
- 所需文件运行用户是否有读/写权限
- xray运行用户是否为有所需权限的用户
走投无路的方法
简化 xray 的 json 文件配置,使用最基本的配置运行,再慢慢添加回原本期望配置,排查是哪个配置块出了问题
简化配置:
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"port": 443,
"protocol": "vless",
"settings": {
"clients": [
{
"id": ""
}
],
"decryption": "none"
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"certificates": [
{
"certificateFile": "/root/xray_cert/xray.crt",
"keyFile": "/root/xray_cert/xray.key"
}
]
}
}
}
],
"outbounds": [
{
"protocol": "freedom"
}
]
}