远程控制rclone
这是实验性的,这里的一切都可能发生变化!
如果使用该--rc
标志运行rclone,则启动一个http服务器,该服务器可用于远程控制rclone。
支持的参数
–rc
标志启动http服务器侦听远程请求
–rc-addr = IP
IP地址:端口或:绑定服务器的端口。(默认“localhost:5572”)
–rc-cert=KEY
SSL PEM密钥(证书和CA证书的串联)
–rc-client-ca=PATH
客户端证书颁发机构以验证客户端
–rc-htpasswd=PATH
htpasswd文件 – 如果没有提供,则不进行身份验证
–rc-key=PATH
SSL PEM私钥
–rc-max-header-bytes=VALUE
请求标头的最大大小(默认为4096)
–rc-user=VALUE
用于验证的用户名。
–rc-pass=VALUE
验证密码。
–rc-realm=VALUE
用于身份验证的领域(默认为“rclone”)
–rc-server-read-timeout=DURATION
服务器读取数据超时(默认1h0m0s)
–rc-server-write-timeout=DURATION
服务器写入数据超时(默认1h0m0s)
通过rclone rc命令访问遥控器
Rclone本身在其rclone rc
命令中实现远程控制协议。
你可以像这样使用它
$ rclone rc rc/noop param1=one param2=two
{
"param1": "one",
"param2": "two"
}
单独运行rclone rc
以查看已安装的远程控制命令的帮助。
支持的命令
cache / expire:从缓存中清除远程
从缓存后端清除远程。支持目录或文件。参数: – remote =远程路径(必需) – withData = true / false以删除缓存数据(块)(可选)
例如
rclone rc cache/expire remote=path/to/sub/folder/
rclone rc cache/expire remote=/ withData=true
cache / fetch:获取文件块
确保指定的文件块缓存在磁盘上。
chunks =参数指定要检查的文件块。它采用逗号分隔的数组切片索引列表。切片索引类似于Python切片:start [:end]
start是从文件开头到0的基于0的块编号。end是从文件开头到0的基于块的数字,以获取exclisive。两个值都可以为负数,在这种情况下,它们从文件的后面开始计算。值“-5:”表示文件的最后5个块。
一些有效的例子是:“:5,-5:” – > 第一个和最后五个块“0,-2” – >最开始和最后2个块“0:10” – >前十个块
具有以“file”开头的键的任何参数可用于指定要获取的文件,例如
rclone rc cache/fetch chunks=0 file=hello file2=home/goodbye
当在缓存顶部使用crypt远程时,文件名将自动加密。
cache/stats: Get cache stats
显示缓存远程的统计信息。
core/bwlimit: Set the bandwidth limit.
这将带宽限制设置为传入的带宽限制。
例如
rclone rc core/bwlimit rate=1M
rclone rc core/bwlimit rate=off
参数的格式与传递给–bwlimit的格式完全相同,只是可以指定一个带宽。
core/gc: Runs a garbage collection。
这告诉go运行时执行垃圾收集运行。没有必要正常调用它,但它可用于调试内存问题。
core/memstats: Returns the memory statistics
这将返回正在运行的程序的内存统计信息。这些值意味着什么在go docs中解释:https://golang.org/pkg/runtime/#MemStats
大多数人最有趣的价值观是:
- HeapAlloc:这是rclone实际使用的内存量
- HeapSys:这是rclone从操作系统获得的内存量
- 系统:这是从操作系统请求的内存总量
- 它是虚拟内存,因此可能包含未使用的内存
core/pid: Return PID of current process
这返回当前进程的PID。用于停止rclone进程。
core/stats: Returns stats about current transfers。
这将返回所有可用的统计信息
rclone rc core/stats
返回以下值:
{
"speed": average speed in bytes/sec since start of the process,
"bytes": total transferred bytes since the start of the process,
"errors": number of errors,
"fatalError": whether there has been at least one FatalError,
"retryError": whether there has been at least one non-NoRetryError,
"checks": number of checked files,
"transfers": number of transferred files,
"deletes" : number of deleted files,
"elapsedTime": time in seconds since the start of the process,
"lastError": last occurred error,
"transferring": an array of currently active file transfers:
[
{
"bytes": total transferred bytes for this file,
"eta": estimated time in seconds until file transfer completion
"name": name of the file,
"percentage": progress of the file transfer in percent,
"speed": speed in bytes/sec,
"speedAvg": speed in bytes/sec as an exponentially weighted moving average,
"size": size of the file in bytes
}
],
"checking": an array of names of currently active file checks
[]
}
仅当数据可用时,才会分配“transfer”,“checking”和“lastError”的值。如果无法确定eta,则“eta”的值为null。
rc/error: This returns an error
这将返回错误,输入作为其错误字符串的一部分。用于测试错误处理。
rc/list: List all the registered remote control commands
这会将所有已注册的远程控制命令列为命令响应中的JSON映射。
rc/noop: Echo the input to the output parameters
这将输入参数回显到输出参数以用于测试目的。它可用于检查rclone是否仍然存活并检查参数传递是否正常工作。
vfs/forget: Forget files or directories in the directory cache
这会忘记目录高速缓存中的路径,从而在需要时从远程重新读取它们。
如果没有传递路径,那么它将忘记目录高速缓存中的所有路径。
rclone rc vfs/forget
否则以file = path或dir = path传递文件或目录。任何以file开头的参数键都会忘记该文件,任何以dir开头的文件都会忘记dir,例如
rclone rc vfs/forget file=hello file2=goodbye dir=home/junk
vfs/poll-interval: Get the status or update the value of the poll-interval option。
如果没有给出任何参数,则返回poll-interval设置的当前状态。
当设置interval = duration参数时,更新poll-interval值并通知轮询功能。设置interval = 0将禁用poll-interval。
rclone rc vfs/poll-interval interval=5m
timeout = duration参数可用于指定等待当前轮询函数应用新值的时间。如果timeout小于或等于0(默认值),则无限期等待。
只有在未达到超时时,新的poll-interval值才会处于活动状态。
如果暂时更新或禁用轮询间隔,则轮询功能可能无法获取某些更改,具体取决于所使用的远程。
vfs/refresh: Refresh the directory cache
这将读取指定路径的目录并使目录缓存变得清晰。
如果没有传递路径,那么它将刷新根目录。
rclone rc vfs/refresh
否则以dir = path传递目录。以dir开头的任何参数键都将刷新该目录,例如
rclone rc vfs/refresh dir=home/junk dir2=data/misc
如果给出参数recursive = true,则将刷新整个目录树。如果启用,此刷新将使用–fast-list。
通过HTTP访问远程控制
Rclone实现了一个简单的基于HTTP的协议。
每个端点都接受一个JSON对象并返回一个JSON对象或错误。JSON对象本质上是字符串名称到值的映射。
所有电话都必须使用POST。
可以使用URL参数,POST参数或通过在正文中提供“Content-Type:application / json”和JSON blob来提供输入对象。以下是使用这些的例子curl
。
响应将是响应正文中的JSON blob。这被格式化为合理的人类可读性。
如果发生错误,则会出现HTTP错误状态(通常为400),并且响应正文将包含JSON编码的错误对象。
服务器实现基本的CORS支持,并允许所有来源。对预检OPTIONS请求的响应将回应所请求的“访问控制请求标头”。
仅使用带URL参数的POST
curl -X POST 'http://localhost:5572/rc/noop/?potato=1&sausage=2'
响应
{
"potato": "1",
"sausage": "2"
}
以下是错误响应的样子:
curl -X POST 'http://localhost:5572/rc/error/?potato=1&sausage=2'
{
"error": "arbitrary error on input map[potato:1 sausage:2]",
"input": {
"potato": "1",
"sausage": "2"
}
}
请注意,除非您使用该-f
选项,否则curl不会向shell返回错误
$ curl -f -X POST 'http://localhost:5572/rc/error/?potato=1&sausage=2'
curl: (22) The requested URL returned error: 400 Bad Request
$ echo $?
22
使用POST与表单
curl --data "potato=1" --data "sausage=2" http://localhost:5572/rc/noop/
响应
{
"potato": "1",
"sausage": "2"
}
请注意,您也可以将这些与URL参数结合使用,优先使用POST参数。
curl --data "potato=1" --data "sausage=2" "http://localhost:5572/rc/noop/?rutabaga=3&sausage=4"
响应
{
"potato": "1",
"rutabaga": "3",
"sausage": "4"
}
使用带有JSON blob的POST
curl -H "Content-Type: application/json" -X POST -d '{"potato":2,"sausage":1}' http://localhost:5572/rc/noop/
响应
{
"password": "xyz",
"username": "xyz"
}
如果需要,这也可以与URL参数结合使用。JSON blob优先。
curl -H "Content-Type: application/json" -X POST -d '{"potato":2,"sausage":1}' 'http://localhost:5572/rc/noop/?rutabaga=3&potato=4'
{
"potato": 2,
"rutabaga": "3",
"sausage": 1
}
用pprof调试rclone
如果使用该--rc
标志,则还可以在同一端口上使用go profiling工具。
要使用这些,请先安装go。
然后(例如)配置rclone的内存使用,你可以运行:
go tool pprof -web http://localhost:5572/debug/pprof/heap
这应该在浏览器中打开一个页面,显示正在使用什么内存。
您还可以使用该-text
标志生成文本摘要
$ go tool pprof -text http://localhost:5572/debug/pprof/heap
Showing nodes accounting for 1537.03kB, 100% of 1537.03kB total
flat flat% sum% cum cum%
1024.03kB 66.62% 66.62% 1024.03kB 66.62% github.com/ncw/rclone/vendor/golang.org/x/net/http2/hpack.addDecoderNode
513kB 33.38% 100% 513kB 33.38% net/http.newBufioWriterSize
0 0% 100% 1024.03kB 66.62% github.com/ncw/rclone/cmd/all.init
0 0% 100% 1024.03kB 66.62% github.com/ncw/rclone/cmd/serve.init
0 0% 100% 1024.03kB 66.62% github.com/ncw/rclone/cmd/serve/restic.init
0 0% 100% 1024.03kB 66.62% github.com/ncw/rclone/vendor/golang.org/x/net/http2.init
0 0% 100% 1024.03kB 66.62% github.com/ncw/rclone/vendor/golang.org/x/net/http2/hpack.init
0 0% 100% 1024.03kB 66.62% github.com/ncw/rclone/vendor/golang.org/x/net/http2/hpack.init.0
0 0% 100% 1024.03kB 66.62% main.init
0 0% 100% 513kB 33.38% net/http.(*conn).readRequest
0 0% 100% 513kB 33.38% net/http.(*conn).serve
0 0% 100% 1024.03kB 66.62% runtime.main
可能的配置文件:
- 记忆:
go tool pprof http://localhost:5572/debug/pprof/heap
- 30秒CPU配置文件:
go tool pprof http://localhost:5572/debug/pprof/profile
- 5秒执行跟踪:
wget http://localhost:5572/debug/pprof/trace?seconds=5
有关 如何使用性能分析的更多信息,请参阅net / http / pprof文档。有关性能分析的程序,请参阅Go团队的博客文章。