环境要求

Python 2.7 或 Python 3

以Debian系统安装为例安装Python3

apt update
apt install python3-pip

安装autoremove-torrents

从 pip 安装

pip3 install autoremove-torrents

或者从 GitHub 安装

git clone https://github.com/jerrymakesjelly/autoremove-torrents.git
cd autoremove-torrents
python3 setup.py install

编写配置文件

你可以把配置文件放在磁盘的任何地方。不过,在默认情况下,autoremove-torrents只在Shell的当前工作目录去找

# 创建autoremove-torrents目录
mkdir /root/autoremove-torrents
# 创建autoremove-torrents 日志文件
touch /root/autoremove-torrents/logs

创建autoremove-torrents的配置文件

nano /root/autoremove-torrents/config.yml

配置示范如下

my_task: 
  client: qbittorrent
  host: http://127.0.0.1:8080
  username: admin
  password: adminadmin
  strategies:
    my_strategy:
      remove: seeding_time > 86400 or (ratio > 1 and last_activity > 600)
  delete_data: false

该语法是复合表达式。

  • and选择同时满足 表达式1 和 表达式2 的种子(交集)。
  • or选择满足 表达式1 或者 表达式2 或者同时满足两个表达式的种子(并集)

删除条件:做种时间86400秒即24小时1天(时间可根据PT站点H&R时长要求调整) 或者 分享率大于1且种子从停止活动(无上传或下载)到现在所经过的时间600秒。

登录信息

这部分是您的登录信息。

  1. 对于 qBittorrent、Transmission 或 μTorrent,本程序借助客户端的 WebUI 工作。
  • client:客户端类型,不区分大小写。
  • host:WebUI的访问地址。该地址必须指明一个协议(http:// 或 https:// )。
  • username:WebUI的用户名。
  • password:WebUI的密码。
  1. 对于 Deluge

本程序通过 RPC 协议访问 Deluge。

  • client:客户端类型,这里填 Deluge 即可。
  • host:Deluge Daemon 的地址(或域名)以及端口,例如 127.0.0.1:58846。
  • username:Deluge Daemon 的用户名。
  • password:Deluge Daemon 的密码。

例:

my_task:
  client: deluge
  host: 127.0.0.1:58846
  username: localclient
  password: 357a0d23f09b9f303f58846e41986b36fef2ac88

注解

  1. 不要在 host 字段中填写任何协议,本程序既不使用 HTTP 协议访问 Deluge,也不用 HTTPS 协议。
  2. 端口号是 Deluge Daemon 的端口号,不是 WebUI 的端口号。可以在 WebUI 中的 Connection Manager 里看到端口号。
  3. 如果你的 autoremove-torrents 和 Deluge 运行在不同的计算机上,请确保您的 Deluge 允许接受远程计算机的连接。您可以在 Preferences -> Daemon -> Allow Remote Connections 中修改这个设置。

注解

一般来说,您可以在 ~/.config/deluge/auth 中找到用户名和密码。您也可以在文件末尾加一行以添加一个用户。

有关身份验证方面的更多信息,请访问 https://dev.deluge-torrent.org/wiki/UserGuide/Authentication 。

过滤器

当前策略只会对你所选择的种子有效。有9个过滤器可以用。

  • all_trackers/all_categories/all_status:选择所有的Tracker/分类/种子状态。
  • categories:选择这些分类的种子。
  • excluded_categories:排除这些分类的种子。
  • trackers:选择这些Tracker的种子。
  • excluded_trackers:排除这些Tracker的种子。
  • status:选择这些状态的种子,可以选择的状态如下表:
状态备注
Downloading/
Uploading/
Checking/
Queued/
PausedTransmission 无此状态。
StoppedqBittorrent 无此状态。
Error/
StalledUploadμTorrent 无此状态。
StalledDownloadμTorrent 无此状态。

excluded_status:排除这些状态的种子,可选的状态如上表。

每个过滤器的结果都是一个种子的集合。

如果categories、trackers、status 三个过滤器的其中两个或者三个同时存在,则程序会取这些集合的交集,并减去 excluded_categories 集合、excluded_trackers 集合和 excluded_status 集合。

  1. 不要在 trackers 中写套接字,trackers 字段只需要填主机名。例如 https://tracker.site1.com 只填写 tracker.site1.com。
  2. 在1.4.4以及以后的版本中,如果 categories、trackers 或 status 中的内容只有一项,可以不使用列表,写一个单行文本就行,例如:
categories: cata1
status: uploading
  1. StalledUp 与 StalledDown 为 1.4.5 版本新增的状态。在本程序中,Uploading 包含 StalledUpload 状态的种子,Downloading 包含 StallDownload 状态的种子。

让我们先看一些例子。例如,选择分类是 Movies 或 Games 的种子:

my_task:
  client: xxx
  host: xxx
  username: xxx
  password: xxx
  strategies:
    my_strategy:
      categories:
        - Movies
        - Games
      # Removing conditions are here
      # ...

选择 Tracker 主机名是 tracker.aaa.com 或 x.bbb.com 的种子:

my_task:
  client: xxx
  host: xxx
  username: xxx
  password: xxx
  strategies:
    my_strategy:
      trackers:
        - tracker.aaa.com
        - x.bbb.com
      # Removing conditons are here
      # ...

选择分类是 Movies 或 Games,但 Tracker 不是 tracker.yyy.com 的种子:

my_task:
  client: xxx
  host: xxx
  username: xxx
  password: xxx
  strategies:
    my_strategy:
      categories:
        - Movies
        - Games
      excluded_trackers:
        - tracker.yyy.com
      # Removing conditions are here
      # ...

选择分类是 Movies 而且状态是正在上传的种子:

my_task:
  client: xxx
  host: xxx
  username: xxx
  password: xxx
  strategies:
    my_strategy:
      categories:
        - Movies
      status:
        - Uploading
      # Removing conditions are here
      # ...

直接使用删除条件关键词

直接使用删除条件关键词,有18个删除条件。

只要选择的种子满足这些条件之一,它就会被删除。

前15个条件如下。为了防止误删种子,某些条件只对特定的状态有效。

条件单位可用状态说明
ratio全部分享率上限
create_time秒全部种子从添加到客户端到现在所经过的时间,以秒为单位。在这里设置一个添加时间的上限,当种子在客户端中存活时间超过此上限后,种子会被直接删除(不管种子现在正处于哪种状态)。
seeding_time秒全部最长做种时间。
max_downloadGiB全部种子最大下载量,超过此限制的种子会被删除。
max_downloadspeedKiB/sDownloading种子的最大下载速度,超过此限制的种子会被删除。
min_uploadspeedKiB/sDownloading 或 Uploading种子的最小上传速度,低于此速度的种子会被删除。
max_average_downloadspeedKiB/s全部最大平均下载速度,如同 max_downloadspeed 。
min_average_uploadspeedKiB/s全部最小平均上传速度,如同 min_uploadspeed 。
max_sizeGiB全部种子大小限制,超过此限制的种子会被删除。
max_seeder全部最大做种者数,超过此限制的种子会被删除。
max_uploadGiB全部种子的最大上传体积,超过此限制的种子会被删除。
min_leecher全部最小下载者数,低于此设置的种子会被删除。
max_connected_seederDownloading 或 Uploading已连接做种者的最大值,如同 max_seeder 。
min_connected_leecherDownloading 或 Uploading已连接下载者数的最小值,如同 min_leecher。
last_activity秒全部种子从停止活动到现在所允许经过的最长时间,即允许的没有上传或下载活动的最长时间。当种子到达此限制时,它就会被删除。
max_progress百分比 (%)全部允许的最大下载进度,最大值是100。
upload_ratio全部最大上传比率。注意,此处的上传比率与分享率不同,对于每个种子来说,上传比率是指上传量除以种子大小的比值。

除了上面的删种条件,这里还有 3 个删种条件。当剩下的种子触发这些删种条件时,它们就会被删除。

seed_size:计算上述选择的种子的总大小。如果总大小超过限制,一部分种子会被删除。需要设置以下两个属性:`

  1. limit:总大小限制,以GiB为单位。
  2. action:确定哪部分种子将被删除。可以是以下值:
值说明
remove-old-seeds尽量删除旧的种子。
remove-new-seeds尽量删除新的种子。
remove-big-seeds尽量删除体积大的种子。
remove-small-seeds尽量删除体积小的种子。
remove-active-seeds尽量删除活跃的种子。
remove-inactive-seeds尽量删除不活跃的种子。

maximum_number:判断上述选择的选择的种子的总个数。如果个数超出设置的最大值,一部分种子会被删除,就像 seed_size 条件一样。需要设置以下两个属性:

  • limit:总个数限制
  • action:确定哪些种子会被删除,取值与含义同上表。

free_space:检查磁盘的剩余空间是否符合设定。如果空间不足,一部分种子会被删除,就像 seed_size 条件一样。需要设置以下三个属性:

  • min:剩余空间最小值,以GiB为单位;当目录的剩余空间小于这个值时,删除策略会被触发。
  • path:需要监控剩余空间的目录
  • action:删除策略,用于确定哪些种子会被删除。取值与含义同上表

remote_free_space:同样也是根据磁盘剩余空间来决定哪些种子会被删除,但这里使用BT客户端汇报的磁盘剩余空间大小。它的行为与 free_space 一致。

  • min:允许的剩余空间最小值,以 GiB 为单位。
  • path:BT客户端需要检查剩余空间大小的目录路径
  • action:删除策略
  1. 如果你的 autoremove-torrents 和你的 BT 客户端运行在不同的机器上,你就需要使用 remote_free_space 去查询剩余空间了。除此之外,free_space 和 remote_free_space 是一样的。
  2. 请注意,并不是所有的客户端都支持检测特定目录的剩余空间。截至目前,只有 Deluge 和 Transmission 支持查询特定目录;若在 qBittorrent 中使用 remote_free_space 的 path 参数,它将会被忽略。

这是一个例子。对于分类是 xxx 或 yyy 的种子,分享率大于1或者做种时间大于1209600秒的种子会被删除:

my_task:
  client: xxx
  host: xxx
  username: xxx
  password: xxx
  strategies:
    my_strategy:
      categories:
        - xxx
        - yyy
      ratio: 1
      seeding_time: 1209600

这也是一个例子。对于全体种子,做种时间大于259200秒的种子会被删除:

my_task:
  client: xxx
  host: xxx
  username: xxx
  password: xxx
  strategies:
    my_strategy:
      seeding_time: 259200

这还有一个例子。对于全体种子,当 /home/myserver/downloads 的剩余空间小于10GiB时,程序会尝试删除体积大的种子:

my_task:
  client: xxx
  host: xxx
  username: xxx
  password: xxx
  strategies:
    my_strategy:
      free_space:
        min: 10
        path: /home/myserver/downloads
        action: remove-big-seeds

这是最后一个例子。对于全体种子,首先删掉那些分享率大于 3 的种子,然后如果剩下的种子的总大小还大于 500GiB 就尽量删除一些活跃的种子,直到总大小小于 500GiB 为止:

my_task:
  client: xxx
  host: xxx
  username: xxx
  password: xxx
  strategies:
    my_strategy:
      ratio: 3
      seed_size:
        limit: 500
        action: remove-active-seeds	  

删除条件 使用remove关键词(高级)

使用 remove 关键词。remove 关键词是在1.4.0版本中新增的关键词,用于支持复杂的删除条件的设置。remove 关键词后接一个表达式,表达式由以下语法构成:

  1. <参数> <比较运算符> <数值>

参数:可选列表如下,不区分大小写。

注解

某些属性只能在特定的状态中使用,不在可用状态的种子不会被删除。

参数单位可用状态说明
average_downloadspeedKiB/s全部平均下载速度。
average_uploadspeedKiB/s全部平均上传速度。
connected_leecher/Downloading 或 Uploading已连接的下载者数。
connected_seeder/Downloading 或 Uploading已连接的做种者数。
create_time秒全部种子从添加到客户端到现在所经过的时间。
downloadGiB全部下载量
download_speedKiB/sDownloading下载速度
last_activity秒全部种子从停止活动(无上传或下载)到现在所经过的时间。
leecher/全部下载者数。
progress%全部下载进度。
ratio/全部分享率
seeder/全部做种者数。
seeding_time秒全部做种时间
sizeGiB全部种子大小。
uploadGiB全部上传量
upload_ratio/全部上传量 / 种子大小
upload_speedKiB/sDownloading 或 Uploading上传速度

比较运算符:可选列表如下。由于种子的状态数据变化快,通常情况下设置一个特定的数据没有意义,因此本程序不提供等号。

比较运算符说明
<小于
>大于

数值:指定一个数值,支持整数和小数。

该语法直接选出符合条件的种子,并直接删除它们或者与后面的复合表达式配合使用。这是一个例子,它直接删除做种时间大于259200秒的种子:

my_task:
  client: xxx
  host: xxx
  username: xxx
  password: xxx
  strategies:
    my_strategy:
      remove: seeding_time > 259200

<表达式1> and <表达式2> 以及 <表达式1> or <表达式2>

该语法是复合表达式。

and:选择同时满足 表达式1 和 表达式2 的种子(交集)。 or:选择满足 表达式1 或者 表达式2 或者同时满足两个表达式的种子(并集)。

  1. 这是一个例子。对于全体种子,分享率超过 2 而且 做种时间超过 60000 秒的种子会被删除:
my_task:
  client: xxx
  host: xxx
  username: xxx
  password: xxx
  strategies:
    my_strategy:
      remove: ratio > 2 and seeding_time > 60000
  1. 这是另外一个例子。对于全体种子,分享率小于 1 或者 做种时间超过 60000 秒的种子会被删除:
my_task:
  client: xxx
  host: xxx
  username: xxx
  password: xxx
  strategies:
    my_strategy:
      remove: ratio < 1 or seeding_time > 60000

(<表达式>)

一个表达式加上括号以后,它仍然是表达式。使用括号可以改变优先级。可以使用多重括号嵌套。

  1. 这是一个例子。对于全体种子,做种时间超过 60000 秒的种子, 或者 分享率大于 3 而且 添加时间超过 1400000 秒的种子会被删除:
my_task:
  client: xxx
  host: xxx
  username: xxx
  password: xxx
  strategies:
    my_strategy:
      remove: seeding_time > 60000 or (ratio > 3 and create_time > 1400000)

本站的完整示范

/root/autoremove-torrents/config.yml仅供参考

# A task block
my_task:          # Part 1: Task Name
  # Part 2: Login Information
  client: qbittorrent
  host: http://127.0.0.1:8080
#对于 qBittorrent、Transmission 或 μTorrent的 host:WebUI的访问地址。该地址必须指明一个协议(http:// 或 https:// )。
#Deluge Daemon 的地址(或域名)以及端口,例如 127.0.0.1:58846
  username: admin
  password: adminadmin
  # Part 3: Strategies Block (Remove Conditions)
  strategies:
    opencd:
      categories:
        - opencd
      remove: (seeding_time > 129600 and last_activity > 1800)
# 皇后全站36小时H&R即129600秒
    pterclub:
      categories:
        - LemonHD
        - pterclub
      remove: last_activity > 1800
# 当前柠檬和猫站均无H&R要求
    btschool:
      categories:
        - btschool
      remove: (seeding_time > 72000 and last_activity > 1800)
# BT学校全站20小时H&R即72000秒
    ourbits:
      categories:
        - ourbits
      remove: seeding_time > 172800 or (ratio > 1 and last_activity > 1800)
# 删除条件(做种时间大于172800秒即48小时、分享率大于1且种子从停止活动1800秒)
# 我堡带H&R标志的种子要求做种48小时
    # Add more strategies here...
  # Part 4: Decide whether to remove and delete data (optional)
  delete_data: true

# Add more tasks here...

记得检查你的配置文件,确保它按照你的想法工作(不然可能就会误删种子了)。使用以下命令行以查看将要删除的种子,但不会真正地删除它们:

autoremove-torrents --view

设置计划任务

创建日志文件

touch logs

创建计划任务

nano /etc/crontab

每15分钟检查一次哪些种子可以被删除,示范如下

*/15 * * * *   root  /usr/local/bin/autoremove-torrents  --conf=/root/autoremove-torrents/config.yml --log=/root/autoremove-torrents/logs >/dev/null 2>&1

--conf参数指示了配置文件的路径。 --log参数指定了存储日志文件的路径(必须存在)

重启crontab

/etc/init.d/cron restart
systemctl restart cron
systemctl restart cron.service