[GH-ISSUE #4890] FRPC reload silently fails when a config is in a new directory #3861

Closed
opened 2026-05-05 14:28:05 -06:00 by gitea-mirror · 4 comments
Owner

Originally created by @vervas on GitHub (Jul 20, 2025).
Original GitHub issue: https://github.com/fatedier/frp/issues/4890

Bug Description

I am creating a new configuration on a fresh directory (for immutability), which in turn includes a confd/ subdirectory where individual config files are loaded using the includes statement. For example

# Directory from which frpc starts:
/frp_configcurrent/
├── confd
└── frpc.toml
# Directory from which frpc is reloaded:
/frp_confignew/
├── confd
│   └── 5651ac0579a02f89807cac3c88d2634858c6b020627954b8cec7d7a816cd35d0.toml
└── frpc.toml

frpc Version

0.63.0

frps Version

0.63.0

System Architecture

darwin/arm64

Configurations

/etc/frp/frp_configcurrent/frpc.toml

serverAddr = "localhost"
serverPort = 7001
includes = ["/etc/frp/frp_configcurrent/confd/*.toml"]

[webServer]
addr = "127.0.0.1"
port = 7500

/etc/frp/frp_confignew/frpc.toml

serverAddr = "localhost"
serverPort = 7001
includes = ["/etc/frp/frp_confignew/confd/*.toml"]

[webServer]
addr = "127.0.0.1"
port = 7500

/etc/frp/frp_confignew/confd/437eaded57ba93f596b621320071bc454c61c861dd546ce31107f67c7d65a4ac.toml

[[proxies]]
type = "tcp"
name = "437eaded57ba93f596b621320071bc454c61c861dd546ce31107f67c7d65a4ac-3035"
localIP = "127.0.0.1"
localPort = 3035
remotePort = 9001

[[proxies]]
type = "tcp"
name = "437eaded57ba93f596b621320071bc454c61c861dd546ce31107f67c7d65a4ac-8080"
localIP = "127.0.0.1"
localPort = 8080
remotePort = 9000

Logs

frpc -c /etc/frp/frp_configcurrent/frpc.toml
2025-07-20 12:26:03.409 [I] [sub/root.go:149] start frpc service for config file [/private/var/folders/xt/bwh9ztjx023fswgsrzjjj6fm0000gn/T/pytest-of-vervas/pytest-1156/popen-gw0/frp_config0/frpc.toml]
2025-07-20 12:26:03.410 [I] [client/service.go:193] admin server listen on 127.0.0.1:7500
2025-07-20 12:26:03.410 [I] [client/service.go:314] try to connect to server...
2025-07-20 12:26:03.427 [I] [client/service.go:306] [a40dfb762f539d09] login to server success, get run id [a40dfb762f539d09]


2025-07-20 12:26:31.759 [I] [client/admin_api.go:79] api request [/api/reload]
2025-07-20 12:26:31.761 [I] [client/admin_api.go:108] success reload conf
2025-07-20 12:26:31.761 [I] [client/admin_api.go:81] api response [/api/reload], code [200]
2025-07-20 12:26:57.495 [I] [client/admin_api.go:168] http request [/api/status]
2025-07-20 12:26:57.495 [I] [client/admin_api.go:170] http response [/api/status]
2025-07-20 12:26:59.789 [I] [client/admin_api.go:201] http get request [/api/config]
2025-07-20 12:26:59.790 [I] [client/admin_api.go:203] http get response [/api/config], code [200]
2025-07-20 12:27:01.956 [I] [client/admin_api.go:168] http request [/api/status]
2025-07-20 12:27:01.956 [I] [client/admin_api.go:170] http response [/api/status]
 frpc reload -c /etc/frp/frp_confignew/frpc.toml
reload success

Steps to reproduce

  1. run frpc pointing to a config file with an includes statement
  2. reload frpc pointing to a config file in a new location with an includes statement
  3. the frpc logs report a successful reload however no new tunnel has come up

Affected area

  • Docs
  • Installation
  • Performance and Scalability
  • Security
  • User Experience
  • Test and Release
  • Developer Infrastructure
  • Client Plugin
  • Server Plugin
  • Extensions
  • Others
Originally created by @vervas on GitHub (Jul 20, 2025). Original GitHub issue: https://github.com/fatedier/frp/issues/4890 ### Bug Description I am creating a new configuration on a fresh directory (for immutability), which in turn includes a `confd/` subdirectory where individual config files are loaded using the includes statement. For example ``` # Directory from which frpc starts: /frp_configcurrent/ ├── confd └── frpc.toml ``` ``` # Directory from which frpc is reloaded: /frp_confignew/ ├── confd │   └── 5651ac0579a02f89807cac3c88d2634858c6b020627954b8cec7d7a816cd35d0.toml └── frpc.toml ``` ### frpc Version 0.63.0 ### frps Version 0.63.0 ### System Architecture darwin/arm64 ### Configurations `/etc/frp/frp_configcurrent/frpc.toml` ```toml serverAddr = "localhost" serverPort = 7001 includes = ["/etc/frp/frp_configcurrent/confd/*.toml"] [webServer] addr = "127.0.0.1" port = 7500 ``` `/etc/frp/frp_confignew/frpc.toml` ```toml serverAddr = "localhost" serverPort = 7001 includes = ["/etc/frp/frp_confignew/confd/*.toml"] [webServer] addr = "127.0.0.1" port = 7500 ``` `/etc/frp/frp_confignew/confd/437eaded57ba93f596b621320071bc454c61c861dd546ce31107f67c7d65a4ac.toml` ```toml [[proxies]] type = "tcp" name = "437eaded57ba93f596b621320071bc454c61c861dd546ce31107f67c7d65a4ac-3035" localIP = "127.0.0.1" localPort = 3035 remotePort = 9001 [[proxies]] type = "tcp" name = "437eaded57ba93f596b621320071bc454c61c861dd546ce31107f67c7d65a4ac-8080" localIP = "127.0.0.1" localPort = 8080 remotePort = 9000 ``` ### Logs ```shell frpc -c /etc/frp/frp_configcurrent/frpc.toml 2025-07-20 12:26:03.409 [I] [sub/root.go:149] start frpc service for config file [/private/var/folders/xt/bwh9ztjx023fswgsrzjjj6fm0000gn/T/pytest-of-vervas/pytest-1156/popen-gw0/frp_config0/frpc.toml] 2025-07-20 12:26:03.410 [I] [client/service.go:193] admin server listen on 127.0.0.1:7500 2025-07-20 12:26:03.410 [I] [client/service.go:314] try to connect to server... 2025-07-20 12:26:03.427 [I] [client/service.go:306] [a40dfb762f539d09] login to server success, get run id [a40dfb762f539d09] 2025-07-20 12:26:31.759 [I] [client/admin_api.go:79] api request [/api/reload] 2025-07-20 12:26:31.761 [I] [client/admin_api.go:108] success reload conf 2025-07-20 12:26:31.761 [I] [client/admin_api.go:81] api response [/api/reload], code [200] 2025-07-20 12:26:57.495 [I] [client/admin_api.go:168] http request [/api/status] 2025-07-20 12:26:57.495 [I] [client/admin_api.go:170] http response [/api/status] 2025-07-20 12:26:59.789 [I] [client/admin_api.go:201] http get request [/api/config] 2025-07-20 12:26:59.790 [I] [client/admin_api.go:203] http get response [/api/config], code [200] 2025-07-20 12:27:01.956 [I] [client/admin_api.go:168] http request [/api/status] 2025-07-20 12:27:01.956 [I] [client/admin_api.go:170] http response [/api/status] ``` ```shell frpc reload -c /etc/frp/frp_confignew/frpc.toml reload success ``` ### Steps to reproduce 1. run frpc pointing to a config file with an includes statement 2. reload frpc pointing to a config file in a new location with an includes statement 3. the frpc logs report a successful reload however no new tunnel has come up ### Affected area - [ ] Docs - [ ] Installation - [ ] Performance and Scalability - [ ] Security - [x] User Experience - [ ] Test and Release - [ ] Developer Infrastructure - [ ] Client Plugin - [ ] Server Plugin - [ ] Extensions - [ ] Others
gitea-mirror 2026-05-05 14:28:05 -06:00
Author
Owner

@fatedier commented on GitHub (Jul 21, 2025):

Currently, the reload command only reloads the configuration file you initially specified, not a new one.

The configuration file path specified during reload is only used to obtain authentication information for calling the API.

<!-- gh-comment-id:3095046524 --> @fatedier commented on GitHub (Jul 21, 2025): Currently, the `reload` command only reloads the configuration file you initially specified, not a new one. The configuration file path specified during `reload` is only used to obtain authentication information for calling the API.
Author
Owner

@vervas commented on GitHub (Jul 22, 2025):

Thanks for the update! Would it make sense to have it load the new configuration the same way the form on the client dashboard does? A small note in the readme and cli about this would also be great in the meantime so as to avoid confusion.

<!-- gh-comment-id:3101676044 --> @vervas commented on GitHub (Jul 22, 2025): Thanks for the update! Would it make sense to have it load the new configuration the same way the form on the client dashboard does? A small note in the readme and cli about this would also be great in the meantime so as to avoid confusion.
Author
Owner

@fatedier commented on GitHub (Jul 24, 2025):

Would it make sense to have it load the new configuration the same way the form on the client dashboard does?

It always updates the original config file in client dashboard.

<!-- gh-comment-id:3111768990 --> @fatedier commented on GitHub (Jul 24, 2025): > Would it make sense to have it load the new configuration the same way the form on the client dashboard does? It always updates the original config file in client dashboard.
Author
Owner

@github-actions[bot] commented on GitHub (Aug 8, 2025):

Issues go stale after 14d of inactivity. Stale issues rot after an additional 3d of inactivity and eventually close.

<!-- gh-comment-id:3166237856 --> @github-actions[bot] commented on GitHub (Aug 8, 2025): Issues go stale after 14d of inactivity. Stale issues rot after an additional 3d of inactivity and eventually close.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: github-starred/frp#3861
No description provided.