You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ruTorrent 3.8创建不应下载文件问题及解决办法咨询

我之前也碰到过这个问题!ruTorrent背后的rTorrent核心默认会为意外接收的数据包创建文件并预分配空间——哪怕你把文件设为“不下载”优先级,本质是为了不浪费已经接收的带宽。下面是几个可行的解决办法,从根源修复到自动清理都有:

1. 修改rTorrent配置(从根源阻止文件创建)

因为ruTorrent只是web前端,真正的下载逻辑由rTorrent处理,所以直接调整rTorrent的配置文件是最彻底的方案:

  1. 打开rTorrent的配置文件,一般是用户目录下的~/.rtorrent.rc,如果是系统级部署可能在/etc/rtorrent/rtorrent.rc。
  2. 添加或修改以下配置项:
# 全局禁用预分配(会影响所有文件,如果你需要预分配可以跳过这行)
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分钟检查一次,自动关闭并删除所有标记为“不下载”的文件。
  1. 重启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插件:

  1. 在ruTorrent的plugins目录新建clean_unwanted文件夹;
  2. 在该文件夹下创建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);
                        }
                    }
                }
            }
        }
    }
}
?>
  1. 回到ruTorrent后台启用这个插件,它会自动帮你清理不需要的文件。

3. 用Shell脚本定时清理

如果不想碰PHP插件,也可以写一个Shell脚本配合crontab定时执行:

  1. 创建脚本文件/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
  1. 给脚本添加执行权限:
chmod +x /usr/local/bin/clean_rutorrent_unwanted.sh
  1. 添加到crontab定时执行(比如每15分钟一次):
crontab -e
# 在文件末尾添加一行
*/15 * * * * /usr/local/bin/clean_rutorrent_unwanted.sh >> /var/log/clean_rutorrent.log 2>&1

内容的提问来源于stack exchange,提问作者John Do

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:00:44