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-2013:48:30 CST;17s ago Docs: https://github.com/xtls Process:7027ExecStart=/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.jsonXray1.8.23(Xray, Penetrates Everything.)4c82ef8(go1.22.5 linux/amd64)A unified platformforanti-censorship.2024/08/2021: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-1nobody nobody08月1816:11 access.log -rw--w--w-1nobody nobody08月1816:11 error.log[root@iZj6c3w6x7zccrjtzelfr8Z xray]# ll /root/xray_cert/总用量16-rwxr-xr-x1root root3178月1913:37 xray-cert-renew.sh -rw-r--r--1root root2748月1914:12 xray-cmd.txt -rw-r--r--1root root28328月1913:26 xray.crt -rw-r--r--1root root2278月1913:26 xray.key得出日志文件只对root用户有读权限
xray运行用户由service文件决定,为确保能享有最高权限,将运行用户改为root用户(按需修改)
#将第一行User=xxx注释掉,会默认使用root用户启动[Service]#User=nobodyCapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICEAmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICENoNewPrivileges=trueExecStart=/usr/local/bin/xray run-config/usr/local/etc/xray/config.jsonRestart=on-failureRestartPreventExitStatus=23LimitNPROC=10000LimitNOFILE=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"}]}