共计 29554 个字符,预计需要花费 74 分钟才能阅读完成。
versionIntroduced: "v1.40"
用其API远程控制rclone
如果rclone在运行时带有--rc
标志,那么它就会启动一个HTTP服务器,可以使用其API来远程控制rclone。
如果你只是想运行一个远程控制,那么请看 rcd 命令。
支持的参数
–rc
启动http服务器监听远程请求的标志
–rc-addr=IP
IPaddress:Port或:Port来绑定服务器。(默认为 "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-min-tls-version=VALUE
可以接受的最小TLS版本。有效值为 "tls1.0"、"tls1.1"、"tls1.2 "和 "tls1.3"(默认为 "tls1.0")。
–rc-user=VALUE
用于认证的用户名。
–rc-pass=VALUE
用于认证的密码。
–rc-realm=VALUE
用于认证的领域(默认为 "rclone")
–rc-server-read-timeout=DURATION
服务器读取数据的超时(默认为1h0m0s)
–rc-server-write-timeout=DURATION
服务器写入数据的超时时间 (默认为1小时0分)
–rc-serve
启用通过HTTP接口为远程对象提供服务。 这意味着默认情况下,对象可以在http://127.0.0.1:5572/,所以你可以浏览http://127.0.0.1:5572/ 或 http://127.0.0.1:5572/* 来查看远程对象的列表。 可以使用以下语法从远程请求对象 http://127.0.0.1:5572/[remote:path]/path/to/object
默认关闭。
–rc-files /path/to/directory
要在HTTP服务器上提供的本地文件的路径。
如果设置了这个,那么rclone将提供该目录下的文件。 如果指定的话,它还会在网络浏览器中打开根目录。 这是为了实现rclone功能的基于浏览器的图形用户界面。
如果--rc-user
或--rc-pass
被设置,那么被打开的URL将以http://user:pass@localhost/
的方式在URL中进行授权。
默认关闭。
–rc-enable-metrics
在/metrics
处启用OpenMetrics/Prometheus兼容端点。
默认为关闭。
–rc-web-gui
设置这个标志,在与rclone相同的端口上提供默认的web gui。
默认为关闭。
–rc-allow-origin
为rc请求设置允许的访问控制-允许-起源。
如果rclone运行在与web-gui不同的IP上,可以与–rc-web-gui一起使用。
默认是rc运行的IP地址。
–rc-web-fetch-url
设置获取rclone-web-gui文件的URL。
默认https://api.github.com/repos/rclone/rclone-webui-react/releases/latest。
–rc-web-gui-update
设置这个标志,从rc-web-fetch-url中检查和更新rclone-webui-react。
默认为关闭。
–rc-web-gui-force-update
设置这个标志,从rc-web-fetch-url中强制更新rclone-webui-react。
默认为关闭。
–rc-web-gui-no-open-browser
设置这个标志,当使用web-gui时,禁止自动打开浏览器。
默认为关闭。
–rc-job-expire-duration=DURATION
超过DURATION(默认为60秒)的已完成的异步作业将过期。
–rc-job-expire-interval=DURATION
检查过期异步作业的间隔时间(默认为10s)。
–rc-no-auth
默认情况下,rclone需要在rc接口上设置授权,以便使用任何访问rclone远程的方法。 例如,"operations/list "被拒绝,因为它涉及到创建一个远程,"sync/copy "也被拒绝。
如果设置了这个选项,那么在服务器上使用这些方法就不需要授权了。 另一种方法是使用--rc-user
和-rc-pass
并在请求中使用这些证书。
默认关闭。
–rc-baseurl
URLs的前缀。
默认为根
–rc-template
用户指定的模板。
通过rclone rc命令访问远程控制 {#api-rc}
Rclone本身在其rclone rc
命令中实现了远程控制协议。
你可以像这样使用它
$ rclone rc rc/noop param1=one param2=two
{
"param1": "one",
"param2": "two"
}
单独运行rclone rc
可以看到已安装的远程控制命令的帮助。
JSON输入
rclone rc
也支持一个--json
标志,可以用来发送更复杂的输入参数。
$ rclone rc --json '{ "p1": [1,"2",null,4], "p2": { "a":1, "b":2 } }' rc/noop
{
"p1": [
1,
"2",
null,
4
],
"p2": {
"a": 1,
"b": 2
}
}
如果被传递的参数是一个对象,那么它可以作为一个JSON字符串来传递,而不是使用--json
标志,这样可以简化命令行。
rclone rc operations/list fs=/tmp remote=test opt='{"showHash": true}'
Rather than
rclone rc operations/list --json '{"fs": "/tmp", "remote": "test", "opt": {"showHash": true}}'
特殊参数
rc接口支持一些适用于***所有命令的特殊参数。 这些参数以_
开头,表明它们是不同的。
使用_async = true运行异步作业
每个rc调用都被归类为一个作业,并被分配了它自己的id。默认情况下,作业在创建时立即执行或同步执行。
如果_async
在提供给rc调用时为true,那么它将立即返回一个作业ID,任务将在后台运行。 job/status
调用可以用来获取后台作业的信息。 工作结束后,可以查询到1分钟内的信息。
建议使用_async
标志运行可能长时间运行的作业,例如sync/sync
、sync/copy
、sync/move
、operations/purge
,以避免HTTP请求和响应超时带来的任何潜在问题。
用_async
标志启动一个作业。
$ rclone rc --json '{ "p1": [1,"2",null,4], "p2": { "a":1, "b":2 }, "_async": true }' rc/noop
{
"jobid": 2
}
查询状态,看作业是否已经完成。 更多关于这些返回参数的含义,请看job/status
调用。
$ rclone rc --json '{ "jobid":2 }' job/status
{
"duration": 0.000124163,
"endTime": "2018-10-27T11:38:07.911245881+01:00",
"error": "",
"finished": true,
"id": 2,
"output": {
"_async": true,
"p1": [
1,
"2",
null,
4
],
"p2": {
"a": 1,
"b": 2
}
},
"startTime": "2018-10-27T11:38:07.911121728+01:00",
"success": true
}
job/list
可以用来显示正在运行或最近完成的工作。
$ rclone rc job/list
{
"jobids": [
2
]
}
用_config设置配置标志
如果你想在调用rc的过程中设置配置(相当于全局标志),那么请传入_config
参数。
这应该与options/get返回的config
键的格式相同。
例如,如果你希望运行一个带有--checksum
参数的同步,你可以在你的JSON blob中传递这个参数。
"_config":{"CheckSum": true}
如果使用 "rclone rc",可以将其作为
rclone rc operations/sync ... _config='{"CheckSum": true}'
任何你没有设置的配置参数将继承用命令行标志或环境变量设置的全局默认值。
注意,可以将一些值设置为字符串或整数–参见数据类型获取更多信息。下面是一个以字符串或整数格式设置--缓冲区大小
的例子。
"_config":{"BufferSize": "42M"}
"_config":{"BufferSize": 44040192}
如果你想检查"_config "分配是否正常,那么调用 "options/local "将显示值被设置为什么。
用_filter设置过滤标志
如果你希望只在rc调用期间设置过滤器,那么请传入_filter
参数。
这应该与options/get返回的filter
键的格式相同。
例如,如果你想用这些标志来运行一个同步
--max-size 1M --max-age 42s --include "a" --include "b"
你会在你的JSON blob中传递这个参数。
"_filter":{"MaxSize":"1M", "IncludeRule":["a","b"], "MaxAge":"42s"}
如果使用 "rclone rc",可以将其作为
rclone rc ... _filter='{"MaxSize":"1M", "IncludeRule":["a","b"], "MaxAge":"42s"}'
你没有设置的任何过滤器参数将继承全局默认值,这些默认值是用命令行标志或环境变量设置的。
注意,可以将一些值设置为字符串或整数–参见数据类型获取更多信息。下面是一个以字符串或整数格式设置--缓冲区大小
的例子。
"_filter":{"MinSize": "42M"}
"_filter":{"MinSize": 44040192}
如果你想检查_filter
的分配是否正常,那么调用options/local
将显示值被设置为什么。
用_group = value将操作分配到组中
每个rc调用都有自己的统计组来跟踪其指标。默认情况下,分组是由前缀job/
和作业ID的复合组名完成的,比如job/1
。
如果_group
有一个值,那么该请求的统计信息将被归入该值。这允许调用者在他们自己的名字下分组统计信息。
通过向core/stats
传递group
,可以访问特定组的统计信息。
$ rclone rc --json '{ "group": "job/1" }' core/stats
{
"speed": 12345
...
}
数据类型 {#data-types}
当API返回类型时,这些类型大多是直接的整数、字符串或布尔类型。
然而,一些由options/get调用返回的类型和由options/set调用采取的类型,以及vfsOpt
、mountOpt
和_config
参数。
Duration
– 这些是以纳秒为单位返回的整数时间。它们可以被设置为整数,也可以用时间字符串设置,例如 "5s"。更多信息请参见选项部分。Size
– 这些被返回为一个整数的字节数。它们可以被设置为整数,也可以用一个大小后缀的字符串来设置,例如 "10M"。更多信息见选项部分。- 枚举类型(如
CutoffMode
,DumpFlags
,LogLevel
,VfsCacheMode
– 这些将以整数形式返回,可以设置为整数,但更方便的是可以设置为字符串,例如CutoffMode
为 "HARD "或LogLevel
为DEBUG
。 BandwidthSpec
– 这将被设置并以字符串形式返回,例如 "1M"。
指定要工作的远程
根据使用的命令,用fs=
, srcFs=
, dstFs=
参数指定远程。
这些参数可以是一个字符串,就像rclone的其他部分一样,例如s3:bucket/path
或者:sftp:/my/dir
。它们也可以被指定为JSON blobs。
如果指定一个JSON blob,它应该是一个将字符串映射到字符串的对象。这些值将被用来配置远程。有3个特殊的值可以被设置。
type
– set totype
to specify a remote called:type:
_name
– set toname
to specify a remote calledname:
_root
– sets the root of the remote – may be empty
通常应设置_name
或type
中的一个。如果需要local
后端,那么type
应该被设置为local
。如果_root
没有被指定,那么它默认为远程的根。
例如,这个JSON相当于remote:/tmp
。
{
"_name": "remote",
"_path": "/tmp"
}
而这相当于`:sftp,host=’example.com’:/tmp’。
{
"type": "sftp",
"host": "example.com",
"_path": "/tmp"
}
而这相当于`/tmp/dir’的意思
{
type = "local",
_ path = "/tmp/dir"
}
支持的命令
{{< rem autogenerated start "- run make rcdocs – don’t edit here" >}}
backend/command。运行一个后端命令。{#backend-command}。
这需要以下参数。
- command – 一个包含命令名称的字符串
- fs – 一个远程名称字符串,例如 "drive:"。
- arg – 后台命令的参数列表
- opt – 一个字符串的映射到选项的字符串
Returns:
- result – 后台命令的结果
Example:
rclone rc backend/command command=noop fs=. -o echo=yes -o blue -a path1 -a path2
Returns
{
"result": {
"arg": [
"path1",
"path2"
],
"name": "noop",
"opt": {
"blue": "",
"echo": "yes"
}
}
}
注意,这直接等同于使用这个 "后端 "命令。
rclone backend noop . -o echo=yes -o blue path1 path2
注意,参数前面必须有"-a "标志。
更多信息见backend命令。
这个电话需要认证。
cache/expire。从缓存中清除一个远程{#cache-expire}。
从缓存后端清除一个远程。支持一个目录或一个文件。 参数。
- remote = 远程的路径(需要)。
- withData = true/false,以便同时删除缓存数据(块)(可选)。
Eg
rclone rc cache/expire remote=path/to/sub/folder/
rclone rc cache/expire remote=/ withData=true
cache/fetch。获取文件块 {#cache-fetch}
确保指定的文件块被缓存在磁盘上。
chunks=参数指定要检查的文件块。 它需要一个逗号分隔的数组片断索引列表。 片断索引类似于Python片断:start[:end]
start是以0为基础的块状数字,从文件的开始到获取(包括)。 end是以0为基础的块状数字,从文件的开始到获取(包括)。
这两个值都可以是负数,在这种情况下,它们从文件的后面开始计算。值"-5: "代表一个文件的最后5个块。
一些有效的例子是。
":5,-5:" -> 第一和最后五块
"0,-2" -> 第一块和第二块最后一块
"0:10" -> 前十块
任何键值以 "file "开头的参数都可以用来指定要取的文件,例如
rclone rc cache/fetch chunks=0 file=hello file2=home/goodbye
当在缓存之上使用加密远程时,文件名将自动被加密。
cache/stats。获取缓存统计信息 {#cache-stats}
Show statistics for the cache remote.
config/create:为一个远程站点创建配置。 {#config-create}
这需要以下参数。
- name – 远程名称
- parameters – a map of { "key":"值"}对
- type – 新远程的类型
- opt – 一个控制配置的选项字典
- obscure – 声明密码是普通的,需要掩盖的。
- noObscure – 声明密码已经被遮蔽,不需要再遮蔽了。
- nonInteractive – 不与用户互动,返回问题
- continue – 继续配置过程的答案
- all – 问所有的配置问题,而不仅仅是配置后的问题
- state – 用来重新启动的状态 – 与continue一起使用
- result – 重新启动的结果 – 与continue一起使用
参见config create命令,了解有关上述内容的更多信息。
这个电话需要认证。
config/delete:删除配置文件中的一个远程. {#config-delete}
参数。
- name – 要删除的远程名称
参见config delete命令,了解有关上述内容的更多信息。
此呼叫需要认证.
config/dump。转储配置文件。 {#config-dump}
返回一个JSON对象。
- key: value
其中键是远程名称,值是配置参数。
参见config dump命令以获得更多关于上述内容的信息。
这个电话需要认证。
config/get。在配置文件中获取一个远程. {#config-get}
参数。
- name – 要获取的远程名称
参见config dump命令以获得更多关于上述内容的信息。
这个电话需要认证。
config/listremotes:列出配置文件中的远程。 {#config-listremotes}
Returns
- remotes – 远程名称的数组
有关上述的更多信息,请参见listremotes命令。
此呼叫需要认证.
config/password:远程配置的密码。 {#config-password}
这需要以下参数。
- name – 远程名称
- parameters – a map of { "key": "value" } pairs
参见config password命令,以了解有关上述的更多信息。
该呼叫需要认证.
config/providers。显示在配置文件中如何配置提供者。 {#config-providers}
返回一个JSON对象。
- providers – array of objects
参见config providers命令,了解有关上述内容的更多信息。
这个电话需要认证。
config/setpath。设置配置文件的路径 {#config-setpath}
参数。
- path – 要使用的配置文件的路径
此呼叫需要认证.
config/update: 更新远程的配置。. {#config-update}
这需要以下参数。
- name – 远程名称
- parameters – a map of { "key": "value" } pairs
- opt – 一个控制配置的选项字典
- obscure – 声明密码是普通的,需要掩盖的。
- noObscure – 声明密码已经被遮蔽,不需要再遮蔽了。
- nonInteractive – 不与用户互动,返回问题
- continue – 继续配置过程的答案
- all – 问所有的配置问题,而不仅仅是配置后的问题
- state – 用来重新启动的状态 – 与continue一起使用
- result – 重新启动的结果 – 与continue一起使用
参见config update命令,了解有关上述内容的更多信息。
此呼叫需要认证.
core/bwlimit: 设置带宽限制。{#core-bwlimit}
这将带宽限制设置为传入的字符串。这应该是一个单一的带宽限制条目或一对上传:下载带宽。
Eg
rclone rc core/bwlimit rate=off
{
"bytesPerSecond": -1,
"bytesPerSecondTx": -1,
"bytesPerSecondRx": -1,
"rate": "off"
}
rclone rc core/bwlimit rate=1M
{
"bytesPerSecond": 1048576,
"bytesPerSecondTx": 1048576,
"bytesPerSecondRx": 1048576,
"rate": "1M"
}
rclone rc core/bwlimit rate=1M:100k
{
"bytesPerSecond": 1048576,
"bytesPerSecondTx": 1048576,
"bytesPerSecondRx": 131072,
"rate": "1M"
}
如果没有提供速率参数,则会查询带宽。
rclone rc core/bwlimit
{
"bytesPerSecond": 1048576,
"bytesPerSecondTx": 1048576,
"bytesPerSecondRx": 1048576,
"rate": "1M"
}
该参数的格式与传递给-bwlimit的参数完全相同,只是只能指定一个带宽。
在这两种情况下,"rate "都是以可读的字符串形式返回,"bytesPerSecond "是以数字形式返回。
core/command。在rc上运行一个rclone终端命令。 {#core-command}
这需要以下参数。
- command – 一个带有命令名称的字符串。
- arg – 后台命令的参数列表。
- opt – 一个字符串到选项字符串的映射。
- returnType -其中之一("COMBINED_OUTPUT"、"STREAM"、"STREAM_ONLY_STDOUT"、"STREAM_ONLY_STDERR")。
- 如果没有设置,默认为 "COMBINED_OUTPUT"。
- STREAM returnTypes将把输出写入HTTP消息的正文。
- COMBINED_OUTPUT将把输出写入 "结果 "参数。
Returns:
- result – 来自后端命令的结果。
- 只在使用返回类型 "COMBINED_OUTPUT "时设置。
- error – 如果rclone退出时出现错误代码,则设置该值。
- returnType – 其中之一("COMBINED_OUTPUT"、"STREAM"、"STREAM_ONLY_STDOUT"、"STREAM_ONLY_STDERR")。
Example:
rclone rc core/command command=ls -a mydrive:/ -o max-depth=1
rclone rc core/command -a ls -a mydrive:/ -o max-depth=1
Returns:
{
"error": false,
"result": "<Raw command line output>"
}
OR
{
"error": true,
"result": "<Raw command line output>"
}
此呼叫需要认证.
core/gc。运行一个垃圾回收。 {#core-gc}
这告诉go运行时做一次垃圾回收运行。 正常情况下没有必要调用这个,但在调试内存问题时可能会很有用。
core/group-list:返回统计信息的列表. {#core-group-list}
返回当前内存中的统计组的列表。
返回以下数值。
{
"groups": an array of group names:
[
"group1",
"group2",
...
]
}
core/memstats:返回内存的统计数据 {#core-memstats}
这将返回运行中的程序的内存统计数据。 这些数值的含义在go文档中有所解释:https://golang.org/pkg/runtime/#MemStats
对大多数人来说,最有趣的数值是。
- HeapAlloc – 这是rclone实际使用的内存量。
- HeapSys – 这是rclone从操作系统获得的内存量。
- Sys – 这是向操作系统请求的总内存量
- 它是虚拟内存,所以可能包括未使用的内存
core/obscure。掩盖传入的一个字符串。 {#core-obscure}
传递一个清晰的字符串,rclone就会对配置文件进行遮蔽。
- clear – string
Returns:
- obscured – string
core/pid:返回当前进程的PID {#core-pid}
返回当前进程的PID,对于停止rclone进程很有用。
core/quit。终止应用程序。 {#core-quit}
(可选)传递一个用于终止应用程序的退出代码。
- exitCode – int
core/stats:返回关于当前传输的统计信息。 {#core-stats}
这将返回所有可用的统计资料。
rclone rc core/stats
如果没有提供组别,那么将返回所有组别的统计数字之和。
参数
- group – name of the stats group (string)
Returns the following values:
{
"bytes": 自该组开始以来的总传输字节数。
"checks": 检查的文件数量。
"deletes" : 删除的文件数量。
"elapsedTime": 自rclone启动以来的时间,单位为浮点秒。
"errors": 错误的数量。
"eta": 直到该组完成的估计时间(秒)。
"fatalError": boolean,是否有至少一个致命的错误。
"lastError": 最后一个错误字符串。
"renames" : 重命名的文件数量。
"retryError": boolean,显示是否有至少一个非NoRetryError。
"speed": 自该组开始以来的平均速度,单位是字节/秒。
"totalBytes": 该组的总字节数。
"totalChecks": 该组中的检查总数。
"totalTransfers": 该组的转让总数。
"transferTime" : 运行工作所花费的总时间。
"transfers": 转移的文件数量。
"transferring": 当前活动文件传输的数组。
[
{
"bytes": 该文件的总传输字节数。
"eta": 距离文件传输完成的估计时间(秒)。
"name": 文件的名称。
"percentage": 文件传输的进度,百分比。
"speed": 整个传输的平均速度,单位是字节/秒。
"speedAvg": 当前的速度,以字节/秒为单位,作为指数加权的移动平均值。
"size": 文件的大小,以字节为单位
}
],
"checking": 当前活动文件检查的名称数组
[]
}
转移"、"检查 "和 "lastError "的值只有在有数据的情况下才会分配。
如果不能确定Eta,"Eta "的值为空。
core/stats-delete: 删除统计信息组。 {#core-stats-delete}
这就删除了整个统计组。
参数
- group – name of the stats group (string)
core/stats-reset: 重置统计信息。 {#core-stats-reset}
这将清除所有统计资料或特定统计组(如果提供了组)的计数器、错误和完成的传输。
参数
- group – name of the stats group (string)
core/transferred。返回关于已完成的转移的统计资料。 {#core-transferred}
这将返回有关已完成的转移的统计资料。
rclone rc core/transferred
如果没有提供组别,那么将返回所有组别的已完成转移。
请注意,只返回最近100次完成的转移。
Parameters
- group – name of the stats group (string)
Returns the following values:
{
"transferred": 一个已完成的传输数组(包括失败的传输)。
[
{
"name": 文件的名称。
"size": 文件的大小,单位是字节。
"bytes": 该文件的总传输字节数。
"checked": 如果只检查转移(跳过、删除)。
"timestamp": 整数,代表毫秒级的unix epoch。
"error": 错误的字符串描述(如果成功则为空)。
"jobid": 该转移属于的工作的ID
}
]
}
core/version。显示rclone和go运行时的当前版本. {#core-version}
这显示了go的当前版本和go的运行时间。
- version – rclone版本,例如 "v1.53.0"
- decomposed – 版本号为[major, minor, patch]。
- isGit -boolean – 如果这是从git版本中编译出来的,则为true
- isBeta – boolean – 如果这是一个测试版本,则为true
- os – 根据Go的说法,正在使用的操作系统
- arch – 根据Go,正在使用的cpu架构
- goVersion – 使用中的Go运行时间版本
- linking – rclone可执行文件的类型(静态或动态)。
- goTags – 以空格分隔的构建标签或 "无"。
debug/set-block-profile-rate:设置runtime.SetBlockProfileRate来进行阻塞式剖析。 {#debug-set-block-profile-rate}
SetBlockProfileRate控制在阻塞配置文件中报告的goroutine阻塞事件的比例。剖析器的目标是对每一个阻塞率纳秒的阻塞事件进行平均采样。
要在剖析中包括每个阻塞事件,通过率=1。要完全关闭剖析,通过率<=0。
调用这个后,你可以用这个来查看阻断配置文件:
go tool pprof http://localhost:5572/debug/pprof/block
参数。
- rate – int
debug/set-gc-percent。调用runtime/debug.SetGCPercent来设置垃圾收集目标百分比。 {#debug-set-gc-percent}
SetGCPercent设置垃圾收集的目标百分比:当新分配的数据与上一次收集后剩余的活数据的比例达到这个百分比时,就会触发收集。SetGCPercent返回之前的设置。初始设置是启动时GOGC环境变量的值,如果没有设置该变量,则为100。
这个设置可以有效地减少,以保持内存限制。 一个负的百分比可以有效地禁用垃圾收集,除非达到内存限制。
更多详情见https://pkg.go.dev/runtime/debug#SetMemoryLimit.
参数:
- gc-percent – int
debug/set-mutex-profile-fraction:设置runtime.SetMutexProfileFraction,用于mutex剖析。 {#debug-set-mutex-profile-fraction}
SetMutexProfileFraction控制在mutex profile中报告的mutex争夺事件的比例。平均来说,报告的事件是1/率。以前的比率被返回。
要完全关闭剖析,通过率为0。要想只读取当前的速率,请通过速率<0。(对于n>1,采样的细节可能会发生变化)。
一旦设置了这个,你就可以用它来剖析互斥争夺。
go tool pprof http://localhost:5572/debug/pprof/mutex
参数:
- rate – int
Results:
- previousRate – int
debug/set-soft-memory-limit: 调用 runtime/debug.SetMemoryLimit 来设置运行时的软内存限制。. {#debug-set-soft-memory-limit}
SetMemoryLimit为运行时提供了一个软内存限制.
运行时进行了几个过程来尝试尊重这个内存限制,包括调整垃圾回收的频率和更积极地将内存返回给底层系统。即使GOGC=off(或者,如果SetGCPercent(-1)被执行),这个限制也会被尊重。
输入限制是以字节为单位的,包括所有映射、管理和未被Go运行时释放的内存。值得注意的是,它不包括围棋二进制使用的空间和围棋外部的内存,例如由底层系统代表进程管理的内存,或由同一进程内的非围棋代码管理的内存。 不包括的内存来源的例子包括。代表进程持有的操作系统内核内存,由C代码分配的内存,以及由syscall.Mmap映射的内存(因为它不由Go运行时管理)。
零限制或低于Go运行时使用的内存量的限制可能导致垃圾收集器几乎连续运行。然而,应用程序仍然可能取得进展.
内存限制总是受到Go运行时的尊重,所以要有效地禁用这一行为,请将限制设置得非常高。数学.MaxInt64是禁用限制的典型值,但比底层系统的可用内存大得多的值也同样适用.
请参阅https://go.dev/doc/gc-guide,了解更详细的解释软内存限制的指南,以及各种常见的使用情况和场景。.
SetMemoryLimit返回先前设置的内存限制。负的输入不会调整限制,并允许检索当前设置的内存限制。.
Parameters:
- mem-limit – int
fscache/clear: 清除Fs缓存。. {#fscache-clear}
这就清除了fs的缓存。在这里,从后端创建的远程被短暂地缓存起来,以使重复的rc调用更有效率。.
如果你改变了一个后台的参数,那么你可能想调用这个,在重新创建之前将现有的远程从缓存中清除。.
此呼叫需要认证.
fscache/entries。返回 fs 缓存中的条目数。 {#fscache-entries}
这将返回fs缓存中的条目数。
Returns
- entries – 缓存中的项目数
该呼叫需要认证.
job/list。列出正在运行的作业的ID{#job-list}
Parameters: None.
Results:
- jobids – array of integer job ids.
job/status。读取工作ID的状态 {#job-status}
Parameters:
- jobid – id of the job (integer).
Results:
- finished – 布尔型
- duration – 该工作运行的时间(秒)。
- endTime – 工作完成的时间(例如,"2018-10-26T18:50:20.528746884+01:00")。
- error – 工作中的错误,如果没有错误则为空字符串
- finished – 布尔型:工作是否已经完成
- id – 如上文中通过的
- startTime – 工作开始的时间(例如 "2018-10-26T18:50:20.528336039+01:00")。
- success – boolean – 成功时为true,否则为false
- output – 工作的输出,就像同步调用时返回的那样
- progress – 与基础工作相关的进度输出
job/stop: 停止运行中的工作 {#job-stop}
Parameters:
- jobid – id of the job (integer).
job/stopgroup:停止一个组中所有正在运行的作业 {#job-stopgroup}
Parameters:
- group – name of the group (string).
mount/listmounts。显示当前的挂载点 {#mount-listmounts}
这显示了当前挂载的点,可用于执行解挂。.
这不需要任何参数,并返回
- mountPoints: list of current mount points
Eg
rclone rc mount/listmounts
此呼叫需要认证.
mount/mount。创建一个新的挂载点 {#mount-mount}
rclone允许Linux、FreeBSD、macOS和Windows使用FUSE将Rclone的任何云存储系统挂载为文件系统。
如果没有提供mountType,则优先级按以下方式确定。1.mount 2.cmount 3.mount2
这需要以下参数:
- fs – 要挂载的远程路径(要求)。
- mountPoint: 本地机器上的有效路径(需要)。
- mountType: 其中一个值(mount,cmount,mount2)指定了要使用的挂载实现。
- mountOpt: 一个带有Mount选项的JSON对象。
- vfsOpt: 一个JSON对象,其中包含VFS选项.
Example:
rclone rc mount/mount fs=mydrive: mountPoint=/home//mountPoint
rclone rc mount/mount fs=mydrive: mountPoint=/home//mountPoint mountType=mount
rclone rc mount/mount fs=TestDrive: mountPoint=/mnt/tmp vfsOpt='{"CacheMode": 2}' mountOpt='{"AllowOther": true}'
vfsOpt如options/get中所述,运行时可在 "vfs "部分看到,mountOpt可在 "mount "部分看到。:
rclone rc options/get
该呼叫需要认证.
mount/types。显示所有可能的挂载类型 {#mount-types}
这显示了所有可能的挂载类型并以列表形式返回。
这不需要任何参数,并返回
- mountTypes: list of mount types
挂载类型是字符串,如 "mount"、"mount2"、"cmount",可以作为mountType参数传递给mount/mount。
Eg
rclone rc mount/types
此呼叫需要认证.
mount/unmount。撤消所选的活动挂载 {#mount-unmount}
rclone允许Linux、FreeBSD、macOS和Windows使用FUSE将Rclone的任何云存储系统挂载为文件系统。
这需要以下参数:
- mountPoint: valid path on the local machine where the mount was created (required)
Example:
rclone rc mount/unmount mountPoint=/home//mountPoint
此呼叫需要认证.
mount/unmountall。解除所有活动的挂载 {#mount-unmountall}
rclone允许Linux、FreeBSD、macOS和Windows使用FUSE将Rclone的任何云存储系统挂载为文件系统。
这个函数不需要任何参数,如果卸载不成功则返回错误。.
Eg
rclone rc mount/unmountall
此呼叫需要认证.
操作/关于。返回遥控器上使用的空间 {#operations-about}
这需要以下参数:
- fs – 一个远程名称字符串,例如 "drive:"。
结果是由rclone about –json返回的。
有关上述的更多信息,请参见about命令。
这个电话需要认证。
操作/清理。删除远程或路径中的废弃文件 {#operations-cleanup}
这需要以下参数:
- fs – 一个远程名称字符串,例如 "drive:"。
有关上述的更多信息,请参见cleanup命令。
这个电话需要认证。
操作/复制文件。从源远程复制一个文件到目标远程 {#operations-copyfile}
这需要以下参数:
- srcFs – 一个远程名称字符串,例如 "drive: "为源文件。
- srcRemote – 一个远程的路径,例如 "file.txt "代表源文件。
- dstFs – 一个远程名称字符串,例如目的地的 "drive2:"。
- dstRemote – 一个远程的路径,例如 "file2.txt "为目的地。
此呼叫需要认证.
操作/copyurl。复制URL到对象中{#operations-copyurl}
这需要以下参数:
- fs – 一个远程名称字符串,例如 "drive:"。
- remote – 该远程的一个路径,例如 "dir"。
- url – 字符串,要读取的URL
- autoFilename – 布尔值,设置为 "true "可从URL中获取目标文件名。
参见copyurl命令,了解更多关于上述内容的信息。.
此呼叫需要认证.
操作/删除。删除路径中的文件 {#operations-delete}
这需要以下参数:
- fs – 一个远程名称字符串,例如 "drive:"。
参见delete命令,了解有关上述内容的更多信息。.
此呼叫需要认证.
operations/deletefile。删除指向的单个文件 {#operations-deletefile}
这需要以下参数:
- fs – 一个远程名称字符串,例如 "drive:"。
- remote – 该远程的一个路径,例如 "dir"。
参见deletefile命令,了解有关上述内容的更多信息。.
此呼叫需要认证.
operations/fsinfo。返回关于远程的信息 {#operations-fsinfo}
这需要以下参数:
- fs – a remote name string e.g. "drive:"
这将返回关于远程传入的信息;
{
// optional features and whether they are available or not
"Features": {
"About": true,
"BucketBased": false,
"BucketBasedRootOK": false,
"CanHaveEmptyDirectories": true,
"CaseInsensitive": false,
"ChangeNotify": false,
"CleanUp": false,
"Command": true,
"Copy": false,
"DirCacheFlush": false,
"DirMove": true,
"Disconnect": false,
"DuplicateFiles": false,
"GetTier": false,
"IsLocal": true,
"ListR": false,
"MergeDirs": false,
"MetadataInfo": true,
"Move": true,
"OpenWriterAt": true,
"PublicLink": false,
"Purge": true,
"PutStream": true,
"PutUnchecked": false,
"ReadMetadata": true,
"ReadMimeType": false,
"ServerSideAcrossConfigs": false,
"SetTier": false,
"SetWrapper": false,
"Shutdown": false,
"SlowHash": true,
"SlowModTime": false,
"UnWrap": false,
"UserInfo": false,
"UserMetadata": true,
"WrapFs": false,
"WriteMetadata": true,
"WriteMimeType": false
},
// Names of hashes available
"Hashes": [
"md5",
"sha1",
"whirlpool",
"crc32",
"sha256",
"dropbox",
"mailru",
"quickxor"
],
"Name": "local", // Name as created
"Precision": 1, // Precision of timestamps in ns
"Root": "/", // Path as created
"String": "Local file system at /", // how the remote will appear in logs
// Information about the system metadata for this backend
"MetadataInfo": {
"System": {
"atime": {
"Help": "Time of last access",
"Type": "RFC 3339",
"Example": "2006-01-02T15:04:05.999999999Z07:00"
},
"btime": {
"Help": "Time of file birth (creation)",
"Type": "RFC 3339",
"Example": "2006-01-02T15:04:05.999999999Z07:00"
},
"gid": {
"Help": "Group ID of owner",
"Type": "decimal number",
"Example": "500"
},
"mode": {
"Help": "File type and mode",
"Type": "octal, unix style",
"Example": "0100664"
},
"mtime": {
"Help": "Time of last modification",
"Type": "RFC 3339",
"Example": "2006-01-02T15:04:05.999999999Z07:00"
},
"rdev": {
"Help": "Device ID (if special file)",
"Type": "hexadecimal",
"Example": "1abc"
},
"uid": {
"Help": "User ID of owner",
"Type": "decimal number",
"Example": "500"
}
},
"Help": "Textual help string\n"
}
}
这个命令没有对应的命令行,所以用这个来代替:
rclone rc --loopback operations/fsinfo fs=remote:
操作/列表。以JSON格式列出给定的远程和路径 {#operations-list}
这需要以下参数:
- fs – 一个远程名称字符串,例如 "drive:"。
- remote – 该远程的一个路径,例如 "dir"。
- opt – 控制列表的选项字典(可选)。
- recurse – 如果设置了递归目录
- noModTime – 如果设置返回修改时间
- showEncrypted – 如果设置显示解密的名字
- showOrigIDs – 如果设置了,显示每个项目的ID(如果知道)。
- showHash – 如果设置,返回一个哈希值的字典
- noMimeType – 如果设置不显示mime类型
- dirsOnly – 如果设置只显示目录
- filesOnly – 如果设置只显示文件
- metadata – 如果设置了,还将返回对象的元数据
- hashTypes – 如果设置了showHash,则显示哈希类型的字符串数组。
Returns:
- list
- 这是一个对象的数组,如lsjson命令中所述
参见lsjson命令,以了解有关上述内容的更多信息和例子。
此呼叫需要认证.
操作/mkdir。制作一个目标目录或容器 {#operations-mkdir}
这需要以下参数:
- fs – 一个远程名称字符串,例如 "drive:"。
- remote – 该远程的一个路径,例如 "dir"。
参见mkdir命令以获得更多关于上述内容的信息。
此呼叫需要认证.
操作/movefile。将一个文件从源远程移动到目标远程 {#operations-movefile}
这需要以下参数:
- srcFs – 一个远程名称字符串,例如 "drive: "为源文件。
- srcRemote – 一个远程的路径,例如 "file.txt "代表源文件。
- dstFs – 一个远程名称字符串,例如目的地的 "drive2:"。
- dstRemote – 一个远程的路径,例如 "file2.txt "为目的地。
此呼叫需要认证.
操作/公共链接。创建或检索一个给定文件或文件夹的公共链接。 {#operations-publiclink}
这需要以下参数:
- fs – 一个远程名称字符串,例如 "drive:"。
- remote – 该远程的一个路径,例如 "dir"。
- unlink – boolean – 如果设置了就会删除链接,而不是添加它(可选)。
- expire – string – 链接的到期时间,例如 "1d"(可选)。
Returns:
- url – 资源的URL
有关上述的更多信息,请参见link命令。
这个电话需要认证。
操作/清除。删除一个目录或容器及其所有的内容 {#operations-purge}
这需要以下参数:
- fs – 一个远程名称字符串,例如 "drive:"。
- remote – 该远程的一个路径,例如 "dir"。
有关上述的更多信息,请参见purge命令。
该呼叫需要认证.
操作/rmdir。删除一个空目录或容器 {#operations-rmdir}
这需要以下参数:
- fs – 一个远程名称字符串,例如 "drive:"。
- remote – 该远程的一个路径,例如 "dir"。
参见rmdir命令,了解有关上述内容的更多信息。
此呼叫需要认证.
操作/rmdirs。删除路径中所有的空目录 {#operations-rmdirs}
这需要以下参数。
- fs – 一个远程名称字符串,例如 "drive:"。
- remote – 该远程的一个路径,例如 "dir"。
- leaveRoot – 布尔值,设置为 "真 "则不删除根。
参见rmdirs命令,了解有关上述内容的更多信息。
这个电话需要认证。
操作/大小。计算远程的字节数和文件数 {#operations-size}
这需要以下参数:
- fs – 一个远程名称字符串,例如 "drive:path/to/dir"
Returns:
- count – 文件数
- bytes – 这些文件中的字节数
有关上述内容的更多信息,请参阅size命令。.
该呼叫需要认证.
operations/stat。提供关于所提供的文件或目录的信息 {#operations-stat}
这需要以下参数
- fs – 一个远程名称字符串,例如 "drive:"
- remote – 一个远程的路径,例如 "dir"
- opt – 控制列表的选项字典(可选)。
- 见操作/列表中的选项
The result is
- item – lsjson命令中描述的一个对象。如果没有找到,将为空。
注意,如果你只对文件感兴趣,那么在选项中设置filesOnly标志会更有效。
参见lsjson命令,以了解有关上述内容的更多信息和例子。
此呼叫需要认证.
操作/uploadfile。使用multiform/form-data上传文件 {#operations-uploadfile}
这需要以下参数。
- fs – 一个远程名称字符串,例如 "drive:"。
- remote – 该远程的一个路径,例如 "dir"。
- 主体中的每个部分都代表一个要上传的文件
此呼叫需要认证.
options/blocks:列出所有的选项块 {#options-blocks}
Returns:
- options – 一个选项块名称的列表
options/get。获取所有全局选项 {#options-get}
返回一个对象,其中键是选项块名称,值是一个包含当前选项值的对象。
注意,这些是全局选项,不受使用_config和_filter参数的影响。如果你想读取_config中设置的参数,那么请使用options/config,对于_filter请使用options/filter。
这显示了rclone内部选项的名称,这些名称应该很容易映射到外部选项,但有一些例外情况.
options/local:获取本次调用的当前活动配置 {#options-local}
返回一个键值为 "config "和 "filter "的对象。 config "键值包含本地配置,"filter "键值包含本地过滤器。.
请注意,这些是针对这个rc调用的本地选项。如果没有提供_config,那么它们将是全局选项。 同样,"_filter "也是如此。
这个调用主要用于查看_config和_filter传递是否有效.
这显示了rclone内部选项的名称,这些名称应该很容易映射到外部选项,但有一些例外情况.
options/set。设置一个选项 {#options-set}
参数:
- option block name containing an object with
- key: value
根据需要经常重复进行.
只提供你想改变的选项。 如果一个选项是未知的,它将被默默地忽略。 并非所有的选项在这样改变时都会产生影响。
For example:
这将设置DEBUG级别的日志(-vv)(这些可以通过数字或字符串设置)。
rclone rc options/set --json '{"main": {"LogLevel": "DEBUG"}}'
rclone rc options/set --json '{"main": {"LogLevel": 8}}'
而这设置了INFO级别的日志(-v)。
rclone rc options/set --json '{"main": {"LogLevel": "INFO"}}'
而这设置了NOTICE级别的日志(正常情况下没有-v)。
rclone rc options/set --json '{"main": {"LogLevel": "NOTICE"}}'
pluginsctl/addPlugin:使用网址添加一个插件 {#pluginsctl-addPlugin}
用于向webgui添加一个插件.
这需要以下参数:
- url – 插件所在的github repo的http网址(http://github.com/rclone/rclone-webui-react)。
Example:
rclone rc pluginsctl/addPlugin
此呼叫需要认证.
pluginsctl/getPluginsForType:获取具有类型标准的插件 {#pluginsctl-getPluginsForType}
这显示了所有可能的插件的mime类型.
这需要以下参数:
- type – 被加载的插件所支持的mime类型,例如(视频/mp4,音频/mp3)。
- pluginType – 根据插件的类型来过滤它们,例如(DASHBOARD, FILE_HANDLER, TERMINAL)。
Returns:
- loadedPlugins – 目前的生产插件列表.
- testPlugins – 暂时加载的开发插件的列表,通常在不同的服务器上运行.
Example:
rclone rc pluginsctl/getPluginsForType type=video/mp4
此呼叫需要认证.
pluginsctl/listPlugins:获取当前加载的插件列表 {#pluginsctl-listPlugins}
这允许你获得当前启用的插件和它们的详细信息.
这不需要任何参数,并返回:
- loadedPlugins – 目前的生产插件列表.
- testPlugins – 暂时加载的开发插件的列表,通常在不同的服务器上运行.
E.g.
rclone rc pluginsctl/listPlugins
此呼叫需要认证.
pluginsctl/listTestPlugins。显示当前加载的测试插件 {#pluginsctl-listTestPlugins}
允许列出测试插件,在插件的package.json中把rclone.test设置为true。.
这不需要任何参数,并返回:
- loadedTestPlugins – 目前可用的测试插件列表.
E.g.
rclone rc pluginsctl/listTestPlugins
此呼叫需要认证.
pluginsctl/removePlugin:删除一个已加载的插件 {#pluginsctl-removePlugin}
这允许你使用一个插件的名称来删除它。.
这需要参数:
- name – 格式为
author
/plugin_name
的插件名称。.
E.g.
rclone rc pluginsctl/removePlugin name=rclone/video-plugin
此呼叫需要认证.
pluginsctl/removeTestPlugin。删除一个测试插件 {#pluginsctl-removeTestPlugin}
这允许你使用一个插件的名称来删除它。.
这需要以下参数:
- name – 格式为
author
/plugin_name
的插件名称。.
Example:
rclone rc pluginsctl/removeTestPlugin name=rclone/rclone-webui-react
此呼叫需要认证.
rc/error。这将返回一个错误 {#rc-error}
这将返回一个错误,其输入是错误字符串的一部分。 对测试错误处理很有用.
rc/list:列出所有注册的远程控制命令 {#rc-list}
这将在命令响应中以JSON地图的形式列出所有注册的远程控制命令。
rc/noop。回声输入到输出参数 {#rc-noop}
这是对输入参数与输出参数的呼应,用于测试。 它可以用来检查rclone是否仍然活着,并检查参数传递是否正常。
rc/noopauth: 呼应输入到输出的参数,需要auth。 {#rc-noopauth}
这是对输入参数与输出参数的呼应,用于测试。 它可以用来检查rclone是否仍然活着,并检查参数传递是否正常。
该呼叫需要认证.
sync/bisync。在两个路径之间进行双向同步. {#sync-bisync}
这需要以下参数
- path1 – 一个远程目录字符串,例如:
drive:path1
。 - path2 – 一个远程目录字符串,例如:
drive:path2
。 - dryRun – 干运行模式
- resync – 执行同步运行
- checkAccess – 如果在两个文件系统中都没有找到RCLONE_TEST文件,则中止。
- checkFilename – checkAccess的文件名(默认:RCLONE_TEST)。
- maxDelete – 如果被删除的文件的百分比超过这个阈值,则中止同步(默认:50)。
- force – maxDelete安全检查并运行同步。
- checkSync – 默认为 "true","false "禁止比较最终列表,"only "将跳过同步,只比较最后一次运行的列表。
- removeEmptyDirs – 在最后的清理步骤中删除空目录
- filtersFile – 从文件中读取过滤模式
- workdir – 历史文件的服务器目录(默认:/home/ncw/.cache/rclone/bisync)。
- noCleanup – 保留工作文件
更多信息见bisync命令帮助和bisync完整描述。.
这个电话需要认证。
sync/copy: 从源远程复制一个目录到目标远程 {#sync-copy}
这需要以下参数:
- srcFs – 一个远程名称字符串,例如 "drive:src "代表源文件。
- dstFs – 一个远程名称字符串,例如目的地的 "drive:dst"。
- createEmptySrcDirs – 如果设置,在目的地创建空的src目录
有关上述内容的更多信息,请参阅copy命令。.
该呼叫需要认证.
sync/move: 将一个目录从源远程移动到目标远程 {#sync-move}
这需要以下参数。
- srcFs – 一个远程名称字符串,例如 "drive:src "代表源文件。
- dstFs – 一个远程名称字符串,例如目的地的 "drive:dst"。
- createEmptySrcDirs – 如果设置,在目的地创建空的src目录yang
- deleteEmptySrcDirs – 如果设置了删除空的src目录
有关上述的更多信息,请参见move命令。
该呼叫需要认证.
sync/sync:将一个目录从源远程同步到目标远程。 {#sync-sync}
这需要以下参数:
- srcFs – 一个远程名称字符串,例如 "drive:src "代表源文件。
- dstFs – 一个远程名称字符串,例如目的地的 "drive:dst"。
- createEmptySrcDirs – 如果设置,在目的地创建空的src目录
参见sync命令,了解有关上述内容的更多信息。.
这个电话需要认证。
vfs/forget:遗忘目录缓存中的文件或目录. {#vfs-forget}
这将忘记目录缓存中的路径,导致需要时需要从远程重新读取这些路径。.
如果没有传入路径,那么它将忘记目录缓存中的所有路径。.
rclone rc vfs/forget
否则就以file=path或dir=path的方式传递文件或目录。 任何以file开头的参数键都会忘记该文件,任何以dir开头的参数键都会忘记该dir,例如。
rclone rc vfs/forget file=hello file2=goodbye dir=home/junk
这个命令需要一个 "fs "参数。如果没有提供这个参数,并且只有一个VFS在使用,那么将使用该VFS。如果有一个以上的VFS在使用,那么必须提供 "fs "参数。.
vfs/list:列出活跃的VFSes. {#vfs-list}
这列出了活动的VFSs.
它在键 "vfses "下返回一个列表,其中的值是可以在 "fs "参数中传递给其他VFS命令的VFS名称。.
vfs/poll-interval:获取投票间隔选项的状态或更新其值. {#vfs-poll-interval}
如果没有给出任何参数,则返回投票间隔设置的当前状态。.
当设置interval=duration参数时,poll-interval值会被更新,并通知轮询功能。 设置interval=0可禁用poll-interval.
rclone rc vfs/poll-interval interval=5m
timeout=duration参数可以用来指定等待当前轮询函数应用新值的时间。 如果timeout小于或等于0,也就是默认值,则无限期地等待.
新的投票间隔值只有在未达到超时的情况下才会被激活.
如果临时更新或禁用轮询间隔,一些变化可能不会被轮询功能接收到,这取决于所使用的遥控器。.
这个命令需要一个 "fs "参数。如果没有提供这个参数,并且只有一个VFS在使用,那么将使用该VFS。如果有一个以上的VFS在使用,那么必须提供 "fs "参数。
vfs/refresh:刷新目录缓存. {#vfs-refresh}
读取指定路径的目录并刷新目录缓存。.
如果没有传入路径,那么它将刷新根目录.
rclone rc vfs/refresh
否则就以dir=path的方式传入目录。任何以dir开头的参数键都会刷新该目录,例如。
rclone rc vfs/refresh dir=home/junk dir2=data/misc
如果参数recursive=true被给出,整个目录树将被刷新。这个刷新将使用–快速列表(如果启用)。
这个命令需要一个 "fs "参数。如果没有提供这个参数,并且只有一个VFS在使用,那么这个VFS将被使用。如果有一个以上的VFS在使用,那么必须提供 "fs "参数。
vfs/stats:一个VFS的统计信息。{#vfs-stats}返回所选VFS的统计数据。
这将返回所选VFS的统计信息。
{
// Status of the disk cache - only present if --vfs-cache-mode > off
"diskCache": {
"bytesUsed": 0,
"erroredFiles": 0,
"files": 0,
"hashType": 1,
"outOfSpace": false,
"path": "/home/user/.cache/rclone/vfs/local/mnt/a",
"pathMeta": "/home/user/.cache/rclone/vfsMeta/local/mnt/a",
"uploadsInProgress": 0,
"uploadsQueued": 0
},
"fs": "/mnt/a",
"inUse": 1,
// Status of the in memory metadata cache
"metadataCache": {
"dirs": 1,
"files": 0
},
// Options as returned by options/get
"opt": {
"CacheMaxAge": 3600000000000,
// ...
"WriteWait": 1000000000
}
}
这个命令需要一个 "fs "参数。如果没有提供这个参数,并且只有一个VFS在使用,那么将使用该VFS。如果有一个以上的VFS在使用,则必须提供 "fs "参数。
{{< rem autogenerated stop >}}。
通过HTTP访问远程控制 {#api-http}
Rclone实现了一个简单的基于HTTP的协议。
每个端点接受一个JSON对象,并返回一个JSON对象或一个错误。 JSON对象本质上是一个字符串名称到值的映射。
所有调用必须使用POST。
输入对象可以使用URL参数、POST参数或通过提供 "Content-Type: application/json "和主体中的JSON blob。 下面是使用curl
的例子。
响应将是一个JSON blob,在响应的主体中。 这个格式是合理的人类可读的。
错误返回
如果发生错误,那么会有一个HTTP错误状态(如500),并且响应的主体将包含一个JSON编码的错误对象,例如。
{
"error": "Expecting string value for key \"remote\" (was float64)",
"input": {
"fs": "/tmp",
"remote": 3
},
"status": 400
"path": "operations/rmdir",
}
错误响应中的键是
- error – 错误字符串
- input – 呼叫的输入参数
- status – HTTP状态代码
- path – 呼叫的路径
CORS
该服务器实现了基本的CORS支持,并允许所有的起源。 对预检OPTIONS请求的响应将回显所请求的 "Access-Control-Request-Headers"。
只使用带有URL参数的POST
curl -X POST 'http://localhost:5572/rc/noop?potato=1&sausage=2'
Response
{
"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
Response
{
"potato": "1",
"sausage": "2"
}
请注意,你也可以将这些参数与URL参数结合起来,以POST参数为优先。
curl --data "potato=1" --data "sausage=2" "http://localhost:5572/rc/noop?rutabaga=3&sausage=4"
Response
{
"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剖析工具。
要使用这些工具,首先安装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/rclone/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/rclone/rclone/cmd/all.init
0 0% 100% 1024.03kB 66.62% github.com/rclone/rclone/cmd/serve.init
0 0% 100% 1024.03kB 66.62% github.com/rclone/rclone/cmd/serve/restic.init
0 0% 100% 1024.03kB 66.62% github.com/rclone/rclone/vendor/golang.org/x/net/http2.init
0 0% 100% 1024.03kB 66.62% github.com/rclone/rclone/vendor/golang.org/x/net/http2/hpack.init
0 0% 100% 1024.03kB 66.62% github.com/rclone/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程序泄漏
内存泄漏最常见的原因是go例程泄漏,使本应被垃圾回收的内存继续存在。
查看所有活动的go例程,使用
curl http://localhost:5572/debug/pprof/goroutine?debug=1
或者在你的浏览器中进入http://localhost:5572/debug/pprof/goroutine?debug=1。
其他要看的资料
你可以在http://localhost:5572/debug/pprof/,看到现有的配置文件摘要。
下面是如何使用其中一些。
- Memory:
go tool pprof http://localhost:5572/debug/pprof/heap
- Go routines:
curl http://localhost:5572/debug/pprof/goroutine?debug=1
- 30-second CPU profile:
go tool pprof http://localhost:5572/debug/pprof/profile
- 5-second execution trace:
wget http://localhost:5572/debug/pprof/trace?seconds=5
- Goroutine blocking profile
- Enable first with:
rclone rc debug/set-block-profile-rate rate=1
(docs) go tool pprof http://localhost:5572/debug/pprof/block
- Enable first with:
- Contended mutexes:
- Enable first with:
rclone rc debug/set-mutex-profile-fraction rate=1
(docs) go tool pprof http://localhost:5572/debug/pprof/mutex
- Enable first with:
关于如何使用剖析的更多信息,请参见 net/http/pprof docs,关于总体概述,请参见 Go 团队关于 go 程序剖析的博文。
剖析钩子是零开销,除非它被使用。