Total Pageviews

Friday, 16 July 2021

goseeder,用Go 实现的自动PT工具


适用于:有多个小鸡/硬盘都不大/只求不吃灰/流量可能还有限制/站点较多/非数据党。

Time4VPS 大盘机当前正在搞活动,推荐上车:15.00EUR/1年/256GB/超流量限速不停机/馒头不标记

Hostens 三年付最划算,推荐上车:43.2USD/3年/256GB/超流量限速不停机/馒头不标记

from https://github.com/nickfox-taterli/goseeder

配置教程:

简而言之,这个工具:

  • 不适合无限流量,希望通过自动辅种获得收益的人.
  • 不适合拿着24T,48T大盘机的人,也不适合只有4G硬盘的人.
  • 适合拥有众多小鸡(N台),容量都不怎么大(10G ~ 1000G),并且网络有流量限制的人.
  • 适合PT佛系养老,不想浪费众多小鸡的人,并且懒得管PT站死活,偶尔上去看看的那些人.

正因为此,这个工具就有了.之前我已经写过一个Python版本,但是那个版本有以下几个问题.

  • 清理策略不完善,偶尔会出现磁盘空间0的情,偶尔过度清理,比如一下子删除了所有任务.
  • 作弊功能基本鸡肋,各站反作弊能力越来越强.
  • 磁盘或者网络过忙时候也会添加种子,最后积累大量任务无法进行,虽然最终跑满带宽,但是上传收益低.
  • 无法对HR限制的PT网站处理,种子可能会被提前删除.

这个配置就这么一个文件,请参考(config-example.json):

  • dbserver 是你在MongoDB Altas申请的数据库的连接字符串,包括你的用户名和密码,格式参考如下,在Mongodb Altas控制面板可以直接取得.获取方法:http://web.archive.org/web/20210716103928/https://www.taterli.com/7691/
  • node 是各PT网站的信息.
    • source 是PT网站的域名
    • passkey 玩过PT都懂
    • limit 即每次获取的数量上限,如果该网站更新快,就调大一些,否则调小一些减轻PT网站压力,推荐保留默认值.
    • enable 是否启用这个网站,填true启用,false就是暂时不用.
    • rule 网站规则(目前是用于HR,满足其中一个条件才可以删除种子,如果无HR请都调到0即可.)
      • seeder_time HR 限制的最小做种时间
      • seeder_ratio HR 限制的最小做种比率
      • speed_limit (V1.1开始)网站限速,比如某些网站过快会被Ban,单位是MB/s.
  • server 是各小鸡QB的配置,Go版本采用并行查询,效率更高.
    • endpoint QB的访问地址,末尾不带斜杠,QB推荐Docker方式安装.(https://hub.docker.com/r/linuxserver/qbittorrent) 或者Ubuntu添加PPA方式 (https://launchpad.net/~qbittorrent-team/+archive/ubuntu/qbittorrent-stable).版本必须大于4.1才可以.确保自己能浏览器打开访问这个地址.
    • username 登录用户名
    • password 登录密码
    • reamrk 方便记忆的名字
    • enable 是否启用这个小鸡,填true启用,false就是暂时不用.
    • rule 小鸡规则(防止被TOS炸,最大化利用率等用途,如果不懂可以不动,调整他可以获得更好的体验.)
      • concurrent_download 最大同时任务数,任务数量过多,磁盘压力和带宽压力都很大,很容易达到瓶颈,如果水管小,则应该调小这个,如果水管大则可以调大,如果不想限制就设置很大的数值就可以,注意任务过多导致网络过快可能会触发TOS.
      • disk_threshold 触发清理功能的磁盘空间,当磁盘空间小于这个数值,就会触发种子清理,会清理掉最老最无用种子,从V1.1开始,单位统一为GB.
      • max_speed 是允许添加种子的最大速度,比如你是100Mbps服务器,理论满速是12.8MB/s,如果此时你的服务器速度已经达到10MB/s,这个时候添加种子就抢不到什么速度,反而影响其他种子进度也落后于人,影响最终分享率,从V1.1开始,单位统一为MB/s.
      • min_alivetime 种子最短存活时间,避免某些种子下载之后没人下载,然后被很快清理掉,错过后期的做种好机会.
      • max_alivetime 种子最大存活时间,必须大于min_alivetime,超过max_alivetime的种子会被优先删除.
      • min_tasksize 最小的种子大小,如果种子小于这个大小就不要添加,添加更大的种子可以获得更好的收益,减轻磁盘压力,相应地也会忽略掉不少任务,设置为0接受任何种子,从V1.1开始,单位统一为GB.
      • max_tasksize 最大的种子大小,如果种子大于这个数值,就不要添加,太大的种子占用空间而且收益不一定高,如果想添加任何种子,请把max_tasksize设置得很大,从V1.1开始,单位统一为GB.
      • max_disklatency 磁盘延迟达到这个数值时候,不会添加任何种子,避免因为长期磁盘占用而触发TOS,如果想忽略这个参数,只需要把延迟调的很大就行,单位是ms.
  • {
      "dbserver": "mongodb+srv://username:password@cluster0.3cyul.mongodb.net/?retryWrites=true&w=majority",
      "node": [
        {
          "source": "www.nicept.net",
          "passkey": "21232f297a57a5a743894a0e4a801fc3",
          "limit": 10,
          "enable": true,
          "rule": {
            "seeder_time": 0,
            "seeder_ratio": 0,
            "speed_limit": 8.0
          }
        },
        {
          "source": "pt.btschool.club", 
          "passkey": "21232f297a57a5a743894a0e4a801fc3", 
          "limit": 10, 
          "enable": true, 
          "rule": {
            "seeder_time": 86400, 
            "seeder_ratio": 1.2, 
            "speed_limit": 10.0 
          }
        }
      ],
      "server": [
        {
          "endpoint": "http://173.82.120.2:8080",
          "username": "admin",
          "password": "TaterLi1024",
          "remark": "Cloudcone (500G)",
          "enable": false,
          "rule": {
            "concurrent_download": 1,
            "disk_threshold": 10.0,
            "disk_overcommit": true,
            "max_speed": 50.00,
            "min_alivetime": 3600,
            "max_alivetime": 86400,
            "min_tasksize": 0.0,
            "max_tasksize": 400.0,
            "max_disklatency": 10000
          }
        }
      ]
    }

    那么如何安装呢,先把配置文件放到/etc/goseeder.conf,然后执行下面几行就可以了.

    curl https://raw.githubusercontent.com/nickfox-taterli/goseeder/master/goseeder.service > /etc/systemd/system/goseeder.service
    curl -L https://github.com/nickfox-taterli/goseeder/releases/download/v1.1/goseeder > /usr/local/bin/goseeder
    chmod a+x /usr/local/bin/goseeder
    systemctl start goseeder
    systemctl enable goseeder

    如何查看安装当前信息呢?

    注意:剩余空间里面,第一个显示的是当任务全部下载完你的磁盘就剩下多少空间,负数意味着Over Commit,这是没关系的.方框内才是真实可用剩余.

    systemctl status goseeder  --no-pager --full

    最后推荐两个便宜大盘机,适合现在这个用途的.

    Time4VPS(最近正在搞15EUR一年大盘机活动):https://billing.time4vps.com/?cmd=cart&action=add&id=119&cycle=y&promocode=2021&utm_source=forum&utm_medium=offer

    Hostens(买3年超划算):https://www.hostens.com/?affid=1662

    他们都是超流量只限速不关机,保种感觉也是超好的,我已经用了一年了.

    可以在终端查看统计,如果需要可以自行构建stat.go

《[BETA]改进版的PT自动工具》有23个想法

  1. 提个建议,不要用mongodb作为数据库,换用sqlite好些。flexget也是使用sqlite作为数据库的。原因:
    1. 软件需要记录的数据量一般不大,
    2. storage vps的RAM本来就不大,能少启动一个服务就尽量少一个。BT软件也特别吃RAM。

    1. 这个不是跑在STOR机上的,是跑在普通机上,就VIR 7刀年付之类的机,然后又为了可以随便搬到哪个服务器不用挪数据库文件用的,还有就是还有其他实用程序需要用这个数据库,SQLite锁文件并不好做.

      另外数据库不是跑在本机的,RAM占用几乎忽略不计.

  2. 大佬小弟愚钝不会用mongodb呐,
    管理面板里没找到完整的链接,全部都是演示。。
    mongo “mongodb+srv://cluster0.cjqoi.mongodb.net/myFirstDatabase” –username user
    哪里输用户名跟密码给我弄糊涂了

    1. 就是这个位置差不多了,他的上一步选择使用程序连接,然后选择Go语言,就会给出一个连接字符串,如果还没创建密码和防火墙还要先创建,不急的话明后天我再写个关于altas的教程。

      1. 谢谢大佬差不多明白了。
        有一个问题就是这个脚本刷的话如果没有免费种的话是不是很容易就刷死了

  3. 还有问题就是有没有可能同一个种子会被多台服务器同时下载。
    我这里添加了两台qb,但是只有一台在用,另外一台没看到有下载记录,而且下载的那台也一直处于等待中的状态、没有速度,不过可能是因为我添加的是小站的问题

    这种情况要怎么排查问题啊大佬

    而且那个查看状态命令运行完就退出了,怎么可以让她一直保持刷新

    小白求教谢谢大佬

  4. 请问可以把单位标上吗?下面的这些没有单位,不知道怎么填写
    “disk_threshold”: 10737412742,
    “max_speed”: 5242880,
    “min_alivetime”:3600,
    “max_alivetime”:86400,
    “min_tasksize”: 1073741274,
    “max_tasksize”: 536870637122,
    “max_disklatency”: 10000

  5. 为什么大多数情况下我的qb会显示You already are downloading the same torrent.
    也就是已经下过该种子了不能再另一台服务器下载,请问是因为这个脚本没有查重功能吗,还是我的数据库设置错误无法查重

  6. 还有哪里可以看到日志,运行只会显示启动,但没动静,是缺少什么依赖吗
    * goseeder.service – Go Seeder Service
    Loaded: loaded (/etc/systemd/system/goseeder.service; enabled; vendor preset: enabled)
    Active: active (running) since Wed 2021-06-09 00:04:05 EDT; 15min 49s ago
    Main PID: 4344 (goseeder)
    Tasks: 4 (limit: 394)
    Memory: 20.1M
    CGroup: /system.slice/goseeder.service
    `-4344 /usr/local/bin/goseeder

    Jun 09 00:04:05 debian systemd[1]: Started Go Seeder Service.

  7. from https://www.taterli.com/7677/

  8. -----

  9. 自动PT工具参数调优

  10. 做这个工具的初衷是为了不让自己众多小鸡吃灰,众多的配置参数为了解决一些问题,先从node配置部分讲起,node配置的是PT站的信息获取,其根本是指导如何抓取资源.目前只考虑NexusPHP情况,配置示例如下.

        {
          "source": "pt.btschool.club", // (请在正式配置中不要包含此注释) => 网站域名
          "passkey": "21232f297a57a5a743894a0e4a801fc3", // (请在正式配置中不要包含此注释) => 密钥
          "limit": 10, // (请在正式配置中不要包含此注释) => 每次抓取数量,过多可能会D挂PT站
          "enable": true, // (请在正式配置中不要包含此注释) => 如果为false,则这个配置暂时不用
          "rule": {
            "seeder_time": 86400, // (请在正式配置中不要包含此注释) => 该站有HR,限制最小做种86400秒
            "seeder_ratio": 1.2, // (请在正式配置中不要包含此注释) => 该站有HR,限制分享率1.2
            "speed_limit": 10.0 // (请在正式配置中不要包含此注释) => 该站限速10.0MB/s
          }
        }
    • limit代表每次抓取的个数,一半抓取10个已经能满足大多数网站的变化,毕竟每5秒能上传10个种子的也不是一般的网站,如果网站更新速度很快,比如每5秒可以更新100个种子,则可以调整得更大,但是很容易因为你调很大不小心把PT站给CC挂了.所以不是越大越好.
    • seeder_time 和 seeder_ratio 是配合HR食用的,如果网站没有HR,就可以两者都设置为0,比如BTSCHOOL开启的HR规则是要不上传20小时,要不做种率达到1.0,我这里这么设置意思是至少做种24小时或做种率至少1.2才可以删除种子,当然,还要避免因为自己的VPS超流量导致HR挂了,所以最好人工偶尔上去检查.不能完全依赖这个功能.
    • speed_limit 是限制上传下载速度,有些网站会对此限制,一旦超速就是警告,设置了限速,就算挂在10G口机上,也不怕超速了.最好设置略低于网站限制的速度.

    而服务器部分得配置,需要充分考虑到提高刷得效率,避免VPS的TOS等等,需要精细地去调整,如果乱填起不到很好的效果,甚至可能长期处于VPS的警告,死机状态.

        {
          "endpoint": "http://173.82.120.1:8080", // (请在正式配置中不要包含此注释) => QB服务器地址
          "username": "admin", // (请在正式配置中不要包含此注释) => QB用户名
          "password": "adminadmin", // (请在正式配置中不要包含此注释) => QB密码
          "remark": "Cloudcone (250G)", // (请在正式配置中不要包含此注释) => 服务器别名
          "enable": false, // (请在正式配置中不要包含此注释) => 如果false则不使能
          "rule": {
            "concurrent_download": 1, // (请在正式配置中不要包含此注释) => 同时下载限制:1个
            "disk_threshold": 10.0, // (请在正式配置中不要包含此注释) => 10GB
            "disk_overcommit": true, // (请在正式配置中不要包含此注释) => 是否可超量安排任务(如果盘小推荐关闭)
            "max_speed": 50.00, // (请在正式配置中不要包含此注释) => 当服务器当前速度大于50MB/s时不再安排任务,避免TOS.
            "min_alivetime": 3600, // (请在正式配置中不要包含此注释) => 种子在服务器最短存活时间3600秒,小于这个时间即使空间不足也不会删除.
            "max_alivetime": 86400, // (请在正式配置中不要包含此注释) => 种子在服务器最长存货时间86400秒,大于这个时间的不活跃内容会被自动删除.
            "min_tasksize": 1.0, // (请在正式配置中不要包含此注释) => 添加的最小种子1GB,太小的话IO太密集.
            "max_tasksize": 200.0,// (请在正式配置中不要包含此注释) => 添加的最大种子200GB,太大话刷的效率低.
            "max_disklatency": 10000 // (请在正式配置中不要包含此注释) => 磁盘延迟大于10000就不要添加种子,添进去怕也下不动..
          }
        }

    最重要的还是调整rule,这关乎于这个VPS怎么安排任务.

    • concurrent_download限制并行下载数,像有人把concurrent_download设置到10000,这样你觉得你的VPS真能承受同时10000个任务下载嘛?另外所有种子刚添加进去都是没速度的,毕竟做种的人还没上线,而如果同时添加了很多任务,当做种的大家都上线之后,就会做成下行完全跑满,甚至超速,而因为带宽已经跑满,而每个种子本身速度又不满,最后就是慢人一步.所以应该把控这个数量,使得他占用你VPS的大部分带宽,而不是因为同时任务过多总是吃满.
    • disk_threshold 是清理阈值,一旦磁盘可用空间低于这个数值,会触发清理功能,避免不能继续下载,有人设置为0,那么0字节时候清理,那么你正在下载的任务就卡住了啊,所以这个数值应该考虑在一个合理的范围,比如服务器5分钟内最多可以填5G数据,那么预留5G.
    • disk_overcommit 表示允许超量提交任务到磁盘,一般来说,由于一部分任务正在下载,一部分任务又会因为过老而删除,所以新增任务的时候不会考虑添加此任务后是否会超出硬盘剩余空间,除非磁盘太小,否则都应该打开这个开关.
    • max_speed 当速度大于这个数值时候不要再添加任务,如果速度已经很快,再添加任务要不触发TOS,要不带宽饱和,又和concurrent_download过大一样的副作用.
    • min_alivetime/max_alivetime 前者规定了如果一个种子添加到任务队列,即使他完全没速度,没人做种,也会等min_alivetime秒才删除(防止发种的人迟迟不做种),后者规定如果要清理种子的时候,遇到种子存活超过min_alivetime才会被清理,前者过小可能导致漏种,毕竟可能对方只是发布没及时做种,过大则队列可能会很满,而导致后续任务不好添加,后者过大可能会导致清理经常失败,过小则上传可能降低.
    • min_tasksize/max_tasksize 添加的种子大小,小文件种子会有很密集的IO,大文件可能没人下载,VPS只添加介于min_tasksize – max_tasksize尺寸的种子.
    • max_disklatency 如果磁盘延迟超过这个数值,则不要继续添加种子,可能会因为密集IO导致封号,Virmach无比设置在500以下.

    实例解说:

    这是个100Mbps端口的机,这里上传已经满了,虽然磁盘空间还有不少,但是如果继续添加种子,也抢不到上传,因为目前上传已经饱和了,当然下载饱和时候也不添加,饱和之后加多少任务,意义不大,毕竟VPS流量有限,是用来刷的,不是用来浪费的.

  11. 这是一个1Gbps的机,明显磁盘空间还有很多,速度也远远没满,所以concurrent_download可以适当加大,目前来说,下载队列中有19个任务,只要不是来个同机房盒子,都只有这个速度,只要不是来个同机房盒子,都不会有多大问题.

    这是Virmach的小鸡,虽然只有1个下载任务,而且速度不快,但是磁盘延迟很大,所以也不会给他塞任务,不然可能会触发TOS,这里的max_disklatency我设置到500,一般来说也同时下载不了几个任务.

  12. from  https://www.taterli.com/7785/

No comments:

Post a Comment