隔壁网

[盒子/seedbox] 盒子自动删除任务的一些方法

2012-12-4 21:10
1017937
群晖和酷狼8t,618活动,每满300减50
618活动,群晖每满300减50,可大刀,暗号芝麻开门。
本帖最后由 genab 于 2012-12-5 10:53 编辑

最近刷累了,不想一直盯着换种,屌丝又买不起大硬盘的seedbox,论坛里的rss和autodl-irssi教程都不少,可是关于自动删种的倒是不多,是不是有盒子的都是500G+的?{:7_716:}从网上找了一下办法,总结一下,针对盒子的三种客户端,有三种方法。

1、transmission
  1. #! /bin/bash
  2. #====================================================================
  3. # trans_cleanup.sh
  4. #
  5. # Copyright (c) 2011, WangYan <webmaster@wangyan.org>
  6. # All rights reserved.
  7. # Distributed under the GNU General Public License, version 3.0.
  8. #
  9. # Monitor disk space, If the Over, delete some files.
  10. #
  11. # See: http://wangyan.org/blog/trans_cleanup.html
  12. #
  13. # V0.2, since 2012-10-29
  14. #====================================================================

  15. # The transmission remote login username
  16. USERNAME="demo"

  17. # The transmission remote login password
  18. PASSWORD="domo"

  19. # The transmission download dir
  20. DLDIR="/root/Downloads"

  21. # The maximum allowed disk (%)
  22. DISK_USED_MAX="95"

  23. # Enable auto shutdown support (Disable=0, Enable=1)
  24. ENABLE_AUTO_SHUTDOWN="0"

  25. # Log path settings
  26. LOG_PATH="/var/log/trans_cleanup.log"

  27. # Date time format setting
  28. DATA_TIME=$(date +"%y-%m-%d %H:%M:%S")

  29. #====================================================================

  30. dist_check()
  31. {
  32.     DISK_USED=`df -h $DLDIR | grep -v Mounted | awk '{print $5}' | cut -d '%' -f 1`
  33.     DISK_OVER=`awk 'BEGIN{print('$DISK_USED'>'$DISK_USED_MAX')}'`
  34. }

  35. dist_check

  36. if [ "$DISK_OVER" = "1" ];then
  37.         for i in `transmission-remote --auth $USERNAME:$PASSWORD -l | grep 100% | grep Done | awk '{print $1}' | grep -v ID`
  38.         do
  39.                 [ "$i" -gt "0" ] && echo -n "$DATA_TIME [Done] " >> $LOG_PATH
  40.                 transmission-remote --auth $USERNAME:$PASSWORD -t $i --remove-and-delete >> $LOG_PATH 2>&1
  41.                 [ "$i" -gt "0" ] && sleep 10 && dist_check
  42.                 [ "$DISK_OVER" = "0" ] && break
  43.         done
  44. fi

  45. if [ "$DISK_OVER" = "1" ];then
  46.         for ii in `transmission-remote --auth $USERNAME:$PASSWORD -l | grep Stopped | awk '{print $1}' | grep -v ID`
  47.         do
  48.                 [ "$ii" -gt "0" ] && echo -n "$DATA_TIME [Stopped] " >> $LOG_PATH
  49.                 transmission-remote --auth $USERNAME:$PASSWORD -t $ii --remove-and-delete >> $LOG_PATH 2>&1
  50.                 [ "$ii" -gt "0" ] && sleep 10 && dist_check
  51.                 [ "$DISK_OVER" = "0" ] && break
  52.         done
  53. fi

  54. if [ "$DISK_OVER" = "1" ];then
  55.         for iii in `transmission-remote --auth $USERNAME:$PASSWORD -l | grep -v Sum | awk '{print $1}' | grep -v ID`
  56.         do
  57.                 [ "$iii" -gt "0" ] && echo -n "$DATA_TIME [Up or Down] " >> $LOG_PATH
  58.                 transmission-remote --auth $USERNAME:$PASSWORD -t $iii --remove-and-delete >> $LOG_PATH 2>&1
  59.                 [ "$iii" -gt "0" ] && sleep 10 && dist_check
  60.                 [ "$DISK_OVER" = "0" ] && break
  61.         done
  62. fi

  63. if [ "$DISK_OVER" = "1" ];then
  64.         rm -rf $DLDIR/*
  65. fi

  66. if [ "$ENABLE_AUTO_SHUTDOWN" = "1" ];then
  67.         SHUTDOWN=1
  68.         for STATUS in `transmission-remote --auth $USERNAME:$PASSWORD -l | awk '{print $9}'`
  69.         do
  70.                 if [[ "$STATUS" = "Up" || "$STATUS" = "Uploading" ]];then
  71.                         SHUTDOWN=0
  72.                 fi
  73.         done
  74.         TASK_TOTAL=`transmission-remote --auth $USERNAME:$PASSWORD -l | grep -Ev '(ID|Sum)' | wc -l`
  75.         if [ "$TASK_TOTAL" -gt "0" ] && [ "$SHUTDOWN" -eq "1" ];then
  76.                 echo -n "$DATA_TIME " >> $LOG_PATH
  77.                 shutdown now >> $LOG_PATH 2>&1
  78.         fi
  79. fi
复制代码
脚本配置:
1)登录用户名,默认是demo
  1. USERNAME="demo"
复制代码
2)登录密码,默认是demo
  1. PASSWORD="domo"
复制代码
3)transmission下载目录,默认在/root/Downloads
  1. DLDIR=/root/Downloads
复制代码
4)磁盘最大使用阀值,默认95%
  1. DISK_USED_MAX="95"
复制代码
5)日志存放路径,默认在/var/log/trans_cleanup.log
  1. LOG_PATH="/var/log/trans_cleanup.log"
复制代码
6)日志日期格式,一般不需要改。
  1. DATA_TIME=$(date +"%y-%m-%d %H:%M:%S")
复制代码
将配置好的脚本保存在/root/trans_cleanup.sh,然后设置计划任务:
  1. crontab -e
  2. */5 * * * *  /bin/bash  /root/trans_cleanup.sh
复制代码
删除顺序说明:

首先逐个删除已经下载完的任务,一旦满足条件则停止删除。
接着逐个删除已经暂停的任务,一旦满足条件则停止删除。
最后按顺序删除正在下载的任务(相当于删除全部任务),直到满足条件。
如果还是未能满足条件,则动用"rm -rf"强制删除下载目录内的所有文件。


2、Deluge
注意:deluge的脚本不适用于只安装deluged和deluge-web的盒子!
  1. from deluge.ui.client import client
  2. from twisted.internet import reactor
  3. from twisted.internet import defer
  4. from deluge.log import setupLogger
  5. import json
  6. import time

  7. MAX_WAIT_TIME = 10
  8. MIN_UPLOAD_SPEED = 50 * 1024
  9. db = {}

  10. def donothing(status):
  11.   return status

  12. def on_get_torrents_status(torrents_status):
  13.         global db
  14.         global MAX_WAIT_TIME
  15.         global MIN_UPLOAD_SPEED
  16.         tlist = []
  17.         for torrent_id in torrents_status:
  18.             torrent_info = torrents_status[torrent_id]            
  19.             if torrent_info['state'] == 'Seeding':
  20.                 if not db.has_key(torrent_id):
  21.                     db[torrent_id] = 0
  22.                 if torrent_info['upload_payload_rate'] < MIN_UPLOAD_SPEED:
  23.                     db[torrent_id] = db[torrent_id] + 1
  24.                 else:
  25.                     db[torrent_id] = 0
  26.                 if db[torrent_id] > MAX_WAIT_TIME:
  27.                     db.pop(torrent_id)
  28.                     tlist.append(client.core.remove_torrent(torrent_id, True).addCallback(donothing))
  29.             if  torrent_info['state'] == 'Queued':
  30.                     tlist.append(client.core.remove_torrent(torrent_id, True).addCallback(donothing))
  31.             if  torrent_info['state'] == 'Error':
  32.                     tlist.append(client.core.remove_torrent(torrent_id, True).addCallback(donothing))
  33.         if len(tlist) > 0:
  34.                 defer.DeferredList(tlist).addCallback(Cleanup)
  35.                 time.sleep(3)
  36.         else:
  37.                 Cleanup(True)

  38. def Cleanup(status):
  39.         global db
  40.         client.disconnect()
  41.         try:
  42.           f = open('autoclean.db', 'w')
  43.           f.write(json.dumps(db))
  44.           f.close()
  45.         except:
  46.           db = {}
  47.         reactor.stop()

  48. def on_connect_success(result):        
  49.     client.core.get_torrents_status(None,
  50.         ['id', 'name', 'state', 'ratio', 'progress', 'upload_payload_rate', 'total_seeds', 'total_peers']).addCallback(on_get_torrents_status)

  51. def on_connect_fail(result):
  52.     print "Connection failed!"
  53.     print "result:", result

  54. setupLogger()
  55. try:
  56.   f = open('autoclean.db', 'r')
  57.   db = json.loads(f.readlines()[0])
  58.   f.close()
  59. except:
  60.   db = {}   
  61. d = client.connect()
  62. d.addCallback(on_connect_success)
  63. d.addErrback(on_connect_fail)
  64. reactor.run()
复制代码
脚本配置:
1)X分钟不活动即删种,默认为10
  1. MAX_WAIT_TIME = 10
复制代码
2)代表上传速度小于X kb就认为种子不活动,默认为50
  1. MIN_UPLOAD_SPEED = 50 * 1024
复制代码
将配置好的脚本保存为/root/autoclean.py,然后设置计划任务:
  1. crontab -e
  2. */1 * * * * /usr/bin/python /root/autoclean.py
复制代码
3、rtorrent/rutorrent
对于rutorrent就简单许多,因为rutorrent自带分享率控制插件,可以手动设置最低分享率、最高分享率、最大上传量和做种时间。



总结一下,三种方法各有优缺点。transmission的脚本保证了磁盘一直不会满,但是种子速度无法保证;deluge的脚本可以自动删除低速种子,但是如果种子全在Downloading是不会删种的;rutorrent的分享率控制插件可以保证一些有H&R的站对于分享率和做种时间的要求,对于种子速度和磁盘空间是无法监控的。

我对于Linux不是很熟悉,这些脚本其实都还有可以优化的地方,不知道有木有大神指导指导{:7_725:}



transmission脚本来源:http://wangyan.org/blog/trans_cleanup.html
deluge脚本来源:http://hdchina.org/forums.php?action=viewtopic&topicid=83254

7

查看全部评分

楼主热帖
分享到 :
46 人收藏

37 个回复

倒序浏览
lislee2001  宗师 | 2012-12-4 21:12:02
楼主强悍啊,。。
落埖涙尐柒  宗师 | 2012-12-4 21:12:22
各大刷子又要开刷了{:7_749:}
jaychous  宗师 | 2012-12-4 21:15:28
因为RT有ratio group 和autodl,所以选择的比较多一点,因为对技术什么的也不是很懂,比较懒
Yamateh@2  大师 | 2012-12-4 21:19:32
jaychous 发表于 2012-12-4 21:15
因为RT有ratio group 和autodl,所以选择的比较多一点,因为对技术什么的也不是很懂,比较懒

RT刷起来感觉没有deluge给力
jaychous  宗师 | 2012-12-4 21:31:00
Yamateh 发表于 2012-12-4 21:19
RT刷起来感觉没有deluge给力

都是直接买的盒子商装好的,就是RT
Deluge是好,8月份体验过了
芬兰冰宁  宗师 | 2012-12-4 22:13:33
这个挺不错的,可惜不是学计算机的,只能默默的复制粘贴
xf是我家媳妇  宗师 | 2012-12-4 22:41:35
deluge的脚本不适用于只安装deluged和deluge-web的盒子!
还有安装神马{:7_733:}
Yamateh@2  大师 | 2012-12-4 22:43:48
xf是我家媳妇 发表于 2012-12-4 22:41
deluge的脚本不适用于只安装deluged和deluge-web的盒子!
还有安装神马

具体我也不太清楚,我只安装deluged和deluge-web运行这个脚本会报错,而用一些一键安装脚本安装的deluge就没有这个问题,可能是GTK?
xf是我家媳妇  宗师 | 2012-12-4 22:49:31
Yamateh 发表于 2012-12-4 22:43
具体我也不太清楚,我只安装deluged和deluge-web运行这个脚本会报错,而用一些一键安装脚本安装的deluge就 ...

不知道5G那个一键安装DELUGE有木有问题{:7_703:}
Yamateh@2  大师 | 2012-12-4 22:52:36
xf是我家媳妇 发表于 2012-12-4 22:49
不知道5G那个一键安装DELUGE有木有问题

一键安装的应该都木有问题,话说deluge这个脚本是专为5G小盒而生的
xf是我家媳妇  宗师 | 2012-12-4 23:14:43
Yamateh 发表于 2012-12-4 22:52
一键安装的应该都木有问题,话说deluge这个脚本是专为5G小盒而生的

{:2_131:}对某些VPS很有用吶
Yamateh@2  大师 | 2012-12-4 23:16:20
xf是我家媳妇 发表于 2012-12-4 23:14
对某些VPS很有用吶

对于硬盘小的VPS都很有用{:7_740:}
xf是我家媳妇  宗师 | 2012-12-4 23:24:19
Yamateh 发表于 2012-12-4 23:16
对于硬盘小的VPS都很有用

{:7_720:}貌似乃有很多吶
Yamateh@2  大师 | 2012-12-4 23:27:13
xf是我家媳妇 发表于 2012-12-4 23:24
貌似乃有很多吶

我就有一个50G的屌丝VPS,买不起大的盒子啊{:7_738:}
xf是我家媳妇  宗师 | 2012-12-4 23:28:26
Yamateh 发表于 2012-12-4 23:27
我就有一个50G的屌丝VPS,买不起大的盒子啊

{:7_740:}俺滴60G比乃大了
Yamateh@2  大师 | 2012-12-4 23:33:22
xf是我家媳妇 发表于 2012-12-4 23:28
俺滴60G比乃大了

你用的是哪家的,能不能偷偷PM我一下{:7_727:}
1

查看全部评分

xf是我家媳妇  宗师 | 2012-12-4 23:35:10
Yamateh 发表于 2012-12-4 23:33
你用的是哪家的,能不能偷偷PM我一下

{:7_740:}这是秘密吶
Yamateh@2  大师 | 2012-12-4 23:38:11
xf是我家媳妇 发表于 2012-12-4 23:35
这是秘密吶

偷偷说下,我不告诉其他人,好不好{:7_751:}
1

查看全部评分

sunshineyy  二流高手 | 2012-12-4 23:44:26
支持一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

淘宝小店

邀请码

VIP会员

微信客服

公众号

微信群

酷狼4t团购 750元,送本站邀请码,群晖每满300减50,可大刀,暗号芝麻开门。 立即登录 立即注册

小黑屋|手机版|Archiver|隔壁网 ( 粤ICP备14056481号-1 )

Powered by Discuz! X3.4 © 2001-2016 Comsenz Inc.

返回顶部