ruTorrent 3.8创建不应下载文件问题及解决办法咨询
我之前也碰到过这个问题!ruTorrent背后的rTorrent核心默认会为意外接收的数据包创建文件并预分配空间——哪怕你把文件设为“不下载”优先级,本质是为了不浪费已经接收的带宽。下面是几个可行的解决办法,从根源修复到自动清理都有:
1. 修改rTorrent配置(从根源阻止文件创建)
因为ruTorrent只是web前端,真正的下载逻辑由rTorrent处理,所以直接调整rTorrent的配置文件是最彻底的方案:
- 打开rTorrent的配置文件,一般是用户目录下的
~/.rtorrent.rc,如果是系统级部署可能在/etc/rtorrent/rtorrent.rc。 - 添加或修改以下配置项:
# 全局禁用预分配(会影响所有文件,如果你需要预分配可以跳过这行) file_allocate.set = 0 # 定时检查并删除优先级为0(不下载)的文件 schedule = filter_unwanted_files,5,5,"d.multicall2=,,f.set_priority=0,f.is_not_priority=1,f.close=,f.delete="
- 第一行
file_allocate.set = 0会关闭所有文件的预分配,避免空文件占用空间; - 第二行的定时任务会每5分钟检查一次,自动关闭并删除所有标记为“不下载”的文件。
- 重启rTorrent和ruTorrent对应的web服务:
sudo systemctl restart rtorrent sudo systemctl restart nginx # 如果你用的是Apache就替换成apache2
2. 用ruTorrent插件实现自动清理
如果你不想修改rTorrent核心配置,可以用ruTorrent的插件来处理:
方案A:使用现成插件
找一个支持按文件优先级清理的插件,比如AutoDelete:
- 下载插件压缩包,解压到ruTorrent的
plugins目录(比如/var/www/rutorrent/plugins/); - 登录ruTorrent后台,进入「设置」-「插件」,启用
AutoDelete; - 在插件配置里添加规则:当文件优先级为**0(不下载)**时,自动删除对应的文件。
方案B:自定义简单插件
如果找不到合适的现成插件,可以自己写一个极简的PHP插件:
- 在ruTorrent的
plugins目录新建clean_unwanted文件夹; - 在该文件夹下创建
init.php文件,内容如下:
<?php class clean_unwanted extends rPlugin { function init() { // 绑定事件:种子添加、完成时触发清理 $this->registerEvent('torrent_finished', 'cleanUnwantedFiles'); $this->registerEvent('torrent_added', 'cleanUnwantedFiles'); // 定时每10分钟检查一次 $this->registerSchedule('clean_unwanted_schedule', 600, 'cleanUnwantedFiles'); } function cleanUnwantedFiles() { foreach($this->getTorrentList() as $torrent) { foreach($torrent->getFiles() as $file) { // 优先级0对应“不下载” if($file->getPriority() === 0) { $fullPath = $torrent->getPath() . '/' . $file->getName(); if(file_exists($fullPath)) { unlink($fullPath); // 顺带删除空目录 $dir = dirname($fullPath); if(count(scandir($dir)) === 2) { rmdir($dir); } } } } } } } ?>
- 回到ruTorrent后台启用这个插件,它会自动帮你清理不需要的文件。
3. 用Shell脚本定时清理
如果不想碰PHP插件,也可以写一个Shell脚本配合crontab定时执行:
- 创建脚本文件
/usr/local/bin/clean_rutorrent_unwanted.sh:
#!/bin/bash # 替换成你的下载根目录 DOWNLOAD_ROOT="/home/your_user/downloads" # 安装rtxmlrpc工具(用来调用rTorrent的RPC接口) if ! command -v rtxmlrpc &> /dev/null; then sudo apt update && sudo apt install -y rtorrent-xmlrpc fi # 获取所有种子的哈希值 TORRENT_HASHES=$(rtxmlrpc d.multicall "" d.hash=) for HASH in $TORRENT_HASHES; do # 获取当前种子下所有文件的路径和优先级 FILE_INFO=$(rtxmlrpc d.multicall "$HASH" f.path= f.priority=) # 逐行解析并处理优先级为0的文件 echo "$FILE_INFO" | while IFS='|' read -r FILE_PATH PRIORITY; do if [ "$PRIORITY" -eq 0 ]; then FULL_PATH="$DOWNLOAD_ROOT/$FILE_PATH" if [ -f "$FULL_PATH" ]; then rm -f "$FULL_PATH" # 删除空目录 PARENT_DIR=$(dirname "$FULL_PATH") if [ -z "$(ls -A "$PARENT_DIR")" ]; then rmdir "$PARENT_DIR" fi fi fi done done
- 给脚本添加执行权限:
chmod +x /usr/local/bin/clean_rutorrent_unwanted.sh
- 添加到crontab定时执行(比如每15分钟一次):
crontab -e # 在文件末尾添加一行 */15 * * * * /usr/local/bin/clean_rutorrent_unwanted.sh >> /var/log/clean_rutorrent.log 2>&1
内容的提问来源于stack exchange,提问作者John Do
相关产品推荐
相关产品推荐

