Perma-seed Servarr媒体库
项目描述
TL;DR:针对每个跟踪器比率优化的Servarr库的永久种子。
仅当磁盘空间不足时才删除种子/项目。
不要删除当前导入的项目。换句话说,仅删除升级的项目。
不要删除未满足种子要求的私有项目。
首先删除公开项目。
按顺序删除私有项目,以最大化跟踪器比率或奖金。
删除停滞的项目,以及包含存档(如*.rar发布)的项目,并在Servarr中将其列入黑名单,即标记为失败。
等等...
摘要
Seed Servarr下载客户端尽可能长时间下载种子/torrents/items,仅在磁盘空间不足时删除,因此得名“修剪”。用户可以配置哪些下载项目被认为适合删除。通常情况下,正在导入的下载项目不考虑删除。来自已升级或以其他方式从库中删除但尚未满足种子索引器要求的私有跟踪器/索引器项目也不考虑删除。删除下载项目的顺序由用户配置的规则确定。通常情况下,首先删除来自公共索引器的项目,然后在要删除的项目中首先删除比率最高的项目,以通过长时间播种不太受欢迎的项目来维护社区的健康发展。接下来,根据配置的索引器优先级删除来自私有索引器的项目,并按顺序删除给定索引器的项目,以最大化比率或播种奖励。
还可以应用其他配置操作。例如
验证并恢复损坏的项目
提高来自私有索引器项目的带宽优先级
降低来自公共索引器项目的带宽优先级
删除并黑名单包含存档(*.rar、*.zip、*.tar.gz等)的下载项目,这些项目不能永久播种
删除并黑名单停滞的下载项目
等等。
$ prunerr命令旨在作为Servarr [1]应用程序和服务套件以及Transmission BitTorrent客户端 [2]的配套工具。它定期轮询下载客户端 [3],例如Sonarr [4]、Radarr [5]等,并将配置的操作应用到每个下载客户端中的下载项目。它还可以独立于任何Servarr实例运行,以优化其他方式添加的下载项目的播种。
有关详细信息,请参阅下面的使用方法部分。
安装
本地安装或使用Docker容器镜像
本地安装
使用任何用于安装标准Python 3分发的工具安装,例如pip [7]
$ pip3 install --user prunerr
可通过使用argcomplete [8]提供可选的shell提示符制表符完成。
Docker容器镜像
推荐使用Docker Compose [9]来使用容器镜像。请参阅示例./docker-compose.yml文件 [10]。编写您的配置并运行容器。
$ docker compose up
您还可以直接使用图片。拉取Docker镜像 [11]。使用它来创建和运行容器
$ docker pull "registry.gitlab.com/rpatterson/prunerr" $ docker run --rm -it "registry.gitlab.com/rpatterson/prunerr" ...
使用镜像变体标签来控制何时更新镜像。发布版本为分支和主版本以及次版本。例如,要跟踪特定分支,请使用类似于registry.gitlab.com/rpatterson/prunerr:main的标签。来自develop的发布包含预发布。来自main的发布包含最终发布。来自main的发布还包含没有分支的标签,例如registry.gitlab.com/rpatterson/prunerr。来自main的发布还包含主版本和次版本的标签,例如registry.gitlab.com/rpatterson/prunerr:v0.8。
发布为以下平台发布多平台镜像
linux/amd64
linux/arm64
linux/arm/v7
使用方法
首先编写您的~/.config/prunerr.yml配置文件。有关详细信息,请参阅示例配置 [12]中的注释。
配置完成后,您可以使用$ prunerr exec子命令一次性运行单个子命令,按配置一次性运行所有操作,或使用$ prunerr daemon子命令在轮询循环中运行所有操作。有关操作的详细描述,请参阅操作顺序部分。使用CLI帮助来列出其他子命令并获取单个子命令的帮助
$ prunerr --help $ prunerr exec --help
如果使用Docker容器镜像,也可以从命令行运行容器
$ docker compose run "prunerr" prunerr --help
操作顺序
请注意,需要轮询,因为我们无法订阅可靠地确定磁盘空间边缘的事件,因为下载客户端正在下载。每次运行$ prunerr exec子命令或每次运行$ prunerr daemon子命令的循环都会执行以下操作。
验证并恢复损坏的项目,与$ prunerr verify相同。
审查下载项,与$ prunerr review相同。
将配置文件中在indexers/reviews下配置的每个索引器审查操作应用于所有下载项。
将Servarr已处理的下载项移动到*/seeding/*目录,与$ prunerr move相同。
当Servarr处理完成的下载项时(无论是从中导入文件、忽略它们、从队列中删除它们等),Prunerr将那些项从Servarr下载客户端的Directory移动到并行*/seeding/*目录。然后当删除下载项以释放空间时,Prunerr仅考虑该目录下的项。这还有一个额外的优点,就是反映下载客户端中Servarr已处理的项。
如果磁盘空间低,则删除下载项,与$ prunerr free-space相同。
按以下顺序考虑不同组中的删除项
不再注册跟踪器的下载项。
换句话说,首先是无法再进行任何种子操作的项目。
不属于任何下载项的孤文件和目录
遍历每个下载客户端使用的所有顶级目录,并确定哪些路径不对应于下载项。
导入/种子下载项
也就是说,下载由Servarr处理并已通过$ prunerr move子命令/操作移动到*/seeding/*目录的项目,排除根据indexers/priorities操作并设置filter: true过滤的项目。例如,不要删除当前导入的项目(通过硬链接计数)或未满足私人索引器播种要求的项。
按顺序对每个这些组,循环遍历组中的每个项目。
将磁盘空间与download-clients/max-download-bandwidth和download-clients/min-download-time-margin配置的边缘进行比较。
如果磁盘空间充足,则删除之前设置的任何带宽限制,并在必要时继续到下一个操作。
否则,删除该项目。
如果在遍历所有组后磁盘空间仍然不足,则通过将下载带宽限制设置为0停止下载。换句话说,继续播种,但不再下载,直到未来$ prunerr free-space运行能够释放足够的空间。
对于孤儿组,先删除较小的项目,以最大限度地减少用户在注意到并纠正导致孤儿的问题时需要重新下载的量。
对于其他组,按照配置的indexers/priorities索引器顺序删除项目,然后按照该项目索引器配置的操作顺序删除。
Docker容器镜像也可以运行命令行脚本。
$ docker compose run "prunerr" prunerr --help usage: prunerr [-h] prunerr foundation or template, top-level package. optional arguments: -h, --help show this help message and exit
贡献
GitLab托管此项目 [13] 并将其镜像到GitHub [14],但请使用GitLab来报告问题、提交拉取或合并请求以及任何其他开发或维护活动。有关如何开始开发的更多详细信息,请参阅贡献文档 [15]。
动机
当时,我不喜欢可用于从精心管理的媒体库中最大化播种的可用选项。按比例阈值删除对我来说没有意义,因为这样可能会在磁盘空间充足时删除项目。此外,比例阈值是私有索引器与公共索引器项目的反向指标。具有高比例的私有索引器项目应尽可能长时间保留,以构建用户总比例,而具有低比例的公共索引器项目应尽可能长时间保留,以在社区/生态系统中保留访问权限。最后,仅因为达到了比例阈值而删除Servarr中仍然导入的任何项目是最浪费的,因为它不会释放任何空间。因此,我编写了Prunerr来正确顺序修剪下载项目。
Prunerr的使用案例不是追踪器比例竞赛。它的目标是尽可能长时间地播种,并尽可能多地播种您的图书馆。这应该会给比例带来一些次要的好处,但这不是主要目标。
最后,还有一系列其他下载客户端管理任务可以自动化,但我在找不到任何此类工具。因此,我也将它们添加到Prunerr中。
参考文献
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
构建分布
prunerr-2.0.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d648eb34d0d727222166cfbb7251738cce754649d79ab10d2cda6ef624167c7f |
|
MD5 | c8200bb3571fd1c41d1ab83ab96db681 |
|
BLAKE2b-256 | 01960750217d0d5de54bc0fc7d5fd6dd15bfdcd141d0b5d1a2d7d8b49092cfde |
prunerr-2.0.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9bae375cdd30f84d00a5951dab87243cc2c530dd6a5b30f28f4f4f5ece2bda18 |
|
MD5 | 6a9f71d5d5b3e2f68017d6100d310d97 |
|
BLAKE2b-256 | 86a0f6c207f74c28c3374790c8f045705746069b2e3fcaa9ae17fd9a37fadf0e |