在 ubuntu vps 上安装了 FRPS ,并且按照以下方法添加了 FRPS service 。 https://gist.github.com/h1code2/3a749d966ed5ef36e4836d24c3f7d3d8
使用 frps 命令是可以启动程序,但是使用 frps service 无法启动,运行 sudo systemctl start frps ,始终是 deactivated 。
~$ sudo systemctl status frps
○ frps.service - FRP Server Service
Loaded: loaded (/etc/systemd/system/frps.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Wed 2025-04-09 05:21:21 UTC; 4s ago
Process: 11559 ExecStart=/usr/bin/frps -c /usr/local/frps/frps.toml (code=exited, status=0/SUCCESS)
Main PID: 11559 (code=exited, status=0/SUCCESS)
CPU: 114ms
Apr 09 05:21:21 HK frps[11566]: # quic protocol options
Apr 09 05:21:21 HK frps[11566]: # transport.quic.keepalivePeriod = 10
Apr 09 05:21:21 HK frps[11566]: # transport.quic.maxIdleTimeout = 30
Apr 09 05:21:21 HK frps[11566]: # transport.quic.maxIncomingStreams = 100000
Apr 09 05:21:21 HK frps[11566]:
Apr 09 05:21:21 HK frps[11566]: # Heartbeat configure, it's not recommended to modify the default value
Apr 09 05:21:21 HK frps[11566]: [149B blob data]
Apr 09 05:21:21 HK frps[11566]: Vim: Finished.
Apr 09 05:21:21 HK frps[11566]: [7B blob data]
Apr 09 05:21:21 HK systemd[1]: frps.service: Deactivated successfully.
请教一下,有没有人知道如何解决?谢谢。
1
Seahurt 3 天前 via Android
配置文件有可能有问题吧。进程的 exit code 是 0 说明程序正常退出了。
|
2
mk3s 3 天前
开 ssh 我上去看一下
|
3
sn0wdr1am 3 天前
通常都是配置问题,你的配置文件是/usr/local/frps/frps.toml ?
|
![]() |
4
yulgang 3 天前
开 ssh 我上去看一下
|
![]() |
5
koala9527 3 天前
配置一下日志,查看一下日志文件
|
![]() |
6
Tiande 3 天前 via Android
docker 跑比较方便
|
7
NessajCN 3 天前
把下面两个命令的输出内容贴上来
ls /usr/local/frps cat /usr/local/frps/frps.toml |
![]() |
8
chinni 3 天前 ![]() 直接 shell 下执行 放前台 就知道原因了。如果前台可以,再考虑服务后的 CWD 和 权限呗。
|
9
aru 3 天前 ![]() 直接运行 /usr/bin/frps -c /usr/local/frps/frps.toml
就会知道原因了 一般来说,要么文件路径不对,要么配置文件有问题 |
![]() |
10
skiy 3 天前
该 gist 漏了一点。没有执行 systemctl daemon-reload
|
11
aloxaf 3 天前
这日志看着太奇怪了,不仅有 「 blob data 」 还有「 Vim: Finished 」,这是在里面启动了 vim ?究竟怎么写配置才能做到这种效果?
建议把服务、配置都发出来看一下。 |
![]() |
12
snipes OP @aru
运行完这个/usr/bin/frps -c /usr/local/frps/frps.toml ,系统直接用 vi 打开了 frps.toml 配置文件。 |
![]() |
13
snipes OP @NessajCN
第一个命令 ls /usr/local/frps enable enable.20250409-000000 frps frps.toml 第二个命令 cat /usr/local/frps/frps.toml bindAddr = "0.0.0.0" bindPort = 5443 # udp port used for kcp protocol, it can be same with 'bindPort'. # if not set, kcp is disabled in frps. kcpBindPort = 5443 # udp port used for quic protocol. # if not set, quic is disabled in frps. quicBindPort = 8443 # Specify which address proxy will listen for, default value is same with bindAddr # proxyBindAddr = "127.0.0.1" # quic protocol options # transport.quic.keepalivePeriod = 10 # transport.quic.maxIdleTimeout = 30 # transport.quic.maxIncomingStreams = 100000 # Heartbeat configure, it's not recommended to modify the default value # The default value of heartbeatTimeout is 90. Set negative value to disable it. transport.heartbeatTimeout = 90 # Pool count in each proxy will keep no more than maxPoolCount. transport.maxPoolCount = 5 # If tcp stream multiplexing is used, default is true transport.tcpMux = true # Specify keep alive interval for tcp mux. # only valid if tcpMux is true. # transport.tcpMuxKeepaliveInterval = 30 # tcpKeepalive specifies the interval between keep-alive probes for an active network connection between frpc and frps. # If negative, keep-alive probes are disabled. # transport.tcpKeepalive = 7200 # transport.tls.force specifies whether to only accept TLS-encrypted connections. By default, the value is false. # transport.tls.force = false # transport.tls.certFile = "server.crt" # transport.tls.keyFile = "server.key" # transport.tls.trustedCaFile = "ca.crt" # If you want to support virtual host, you must set the http port for listening (optional) # Note: http port and https port can be same with bindPort vhostHTTPPort = 8080 vhostHTTPSPort = 8443 # Response header timeout(seconds) for vhost http server, default is 60s # vhostHTTPTimeout = 60 # tcpmuxHTTPConnectPort specifies the port that the server listens for TCP # HTTP CONNECT requests. If the value is 0, the server will not multiplex TCP # requests on one single port. If it's not - it will listen on this value for # HTTP CONNECT requests. By default, this value is 0. # tcpmuxHTTPConnectPort = 1337 # If tcpmuxPassthrough is true, frps won't do any update on traffic. # tcpmuxPassthrough = false # Configure the web server to enable the dashboard for frps. # dashboard is available only if webServerport is set. webServer.addr = "0.0.0.0" webServer.port = 6443 webServer.user = "admin" webServer.password = "lokithor4123" # webServer.tls.certFile = "server.crt" # webServer.tls.keyFile = "server.key" # dashboard assets directory(only for debug mode) # webServer.assetsDir = "./static" # Enable golang pprof handlers in dashboard listener. # Dashboard port must be set first # webServer.pprofEnable = false # enablePrometheus will export prometheus metrics on webServer in /metrics api. # enablePrometheus = true # console or real logFile path like ./frps.log log.to = "enable" # trace, debug, info, warn, error log.level = "info" log.maxDays = 3 # disable log colors when log.to is console, default is false # log.disablePrintColor = false # DetailedErrorsToClient defines whether to send the specific error (with debug info) to frpc. By default, this value is true. # detailedErrorsToClient = true # auth.method specifies what authentication method to use authenticate frpc with frps. # If "token" is specified - token will be read into login message. # If "oidc" is specified - OIDC (Open ID Connect) token will be issued using OIDC settings. By default, this value is "token". auth.method = "token" # auth.additionalScopes specifies additional scopes to include authentication information. # Optional values are HeartBeats, NewWorkConns. # auth.additionalScopes = ["HeartBeats", "NewWorkConns"] # auth token auth.token = "6vMltzpz9E9ulEgi" # userConnTimeout specifies the maximum time to wait for a work connection. # userConnTimeout = 10 # Max ports can be used for each client, default value is 0 means no limit # maxPortsPerClient = 0 # If subDomainHost is not empty, you can set subdomain when type is http or https in frpc's configure file # When subdomain is test, the host used by routing is test.frps.com subDomainHost = "20.198.220.105" # custom 404 page for HTTP requests # custom404Page = "/path/to/404.html" # specify udp packet size, unit is byte. If not set, the default value is 1500. # This parameter should be same between client and server. # It affects the udp and sudp proxy. # udpPacketSize = 1500 # Retention time for NAT hole punching strategy data. # natholeAnalysisDataReserveHours = 168 # ssh tunnel gateway # If you want to enable this feature, the bindPort parameter is required, while others are optional. # By default, this feature is disabled. It will be enabled if bindPort is greater than 0. # sshTunnelGateway.bindPort = 2200 # sshTunnelGateway.privateKeyFile = "/home/frp-user/.ssh/id_rsa" # sshTunnelGateway.autoGenPrivateKeyPath = "" # sshTunnelGateway.authorizedKeysFile = "/home/frp-user/.ssh/authorized_keys" |
![]() |
14
snipes OP |
15
NessajCN 3 天前
@snipes 你这 frps 程序咋装的
/etc/init.d/frps 是正常的可执行文件吗? 建议直接把 frps 执行文件放到 /usr/local/bin/ 里 然后 /usr/local/bin/frps -c /usr/local/frps/frps.toml |
16
hxy100 3 天前
重装 frps ,根据你 14 楼的回复,frps 不是有效的二进制文件,软链接指向更是错误的。
|
18
spencerseth44 3 天前
我之前也碰到过,不过我那次好像是文件权限问题,最后懒的查了,搞个脚本一分钟检查一次进程在不在,不在就 frps -c frps.ini 启一下
|
19
aru 3 天前
@snipes
15 和 16 楼已经说的很清楚了 重新下载 frp 软件包并解压 拷贝 frps 到 /usr/local/frps/ 目录下 删除错误的软链接文件 rm /usr/bin/frps ln -s /usr/local/frps/frps /usr/bin/frps |
21
julyclyde 1 天前
“运行完这个/usr/bin/frps -c /usr/local/frps/frps.toml ,系统直接用 vi 打开了 frps.toml 配置文件。”
可以想象你已经经历过无数错误操作了 别把一切恶果都推给别人家脚本 |