远程控制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团队的博客文章

除非使用,否则分析钩子的开销为零

Was this article helpful?

       

相关文章

提交一个评论?