跳转至

钩子

钩子用于观察下载生命周期。它们是可选的:用 --hook NAME(可多次)单次启用, 或在 [core] hooks = [...] 常驻启用;其选项位于 [plugins.<名称>]。

事件

事件 载荷
on_start {targets: [...]}
on_task_start {task}
on_task_finish {task, ok}
on_error {task, error}
on_finish {succeeded, failed}

内置钩子:logfile、archive、webhook、manifest、exec、checksum。


logfile

把每个事件按 TSV 追加写入文件。

键 默认 含义
path downctl.log 日志文件(支持 ~ 展开)
[core]
hooks = ["logfile"]

[plugins.logfile]
path = "~/.cache/downctl/run.log"

archive

任务完成时解压下载好的压缩包;对路径穿越做了防护,并拒绝链接/设备/FIFO。

键 默认 含义
into 同名兄弟目录 解压目标目录
keep true 解压后保留原压缩包

支持:.zip、.tar、.tar.gz/.tgz、.tar.bz2/.tbz2、.tar.xz/.txz。

[core]
hooks = ["archive"]

[plugins.archive]
into = "~/Downloads/extracted"
keep = false

webhook

把选定事件以 JSON POST 出去(fire-and-forget,退出前会 flush)。

键 默认 含义
url 无 端点(必填)
events ["on_finish"] 要发送的事件
timeout 30 请求超时(秒)
[core]
hooks = ["webhook"]

[plugins.webhook]
url = "https://example.com/downctl"
events = ["on_start", "on_task_finish", "on_finish"]

任务对象序列化为 {url, target, source}。


manifest

为已完成的下载写一份 sha256sum 风格清单,可日后配合 --checksums 复验。

键 默认 含义
filename .downctl.manifest 清单文件名
[core]
hooks = ["manifest"]

[plugins.manifest]
filename = ".downctl.manifest"

用上一次运行的清单复验一次重下:

downctl get <url> -d new --checksums old/.downctl.manifest

exec

事件触发时执行 shell 命令。

键 默认 含义
command 无 shell 命令(必填)
events ["on_task_finish"] 触发的命令
timeout 300 命令被杀前的秒数

事件信息通过环境变量传入:DOWNCTL_EVENT、DOWNCTL_TARGET、DOWNCTL_PATH、 DOWNCTL_URL、DOWNCTL_OK。

[core]
hooks = ["exec"]

[plugins.exec]
command = "echo \"$DOWNCTL_TARGET -> $DOWNCTL_PATH\" >> ~/downloads.log"

安全:命令以你的权限运行,只配置你信任的命令。


checksum

为每个已完成的下载写一份 <文件>.<算法> 边车,格式为 sha256sum 行 (<hex> <文件名>),可日后配合 --checksums 使用。

键 默认 含义
algo sha256 哈希算法(sha256/sha1/sha512/md5)
events ["on_task_finish"] 触发的命令
[core]
hooks = ["checksum"]

[plugins.checksum]
algo = "sha256"