Yamateh@2 发表于 2012-12-4 21:10:24

盒子自动删除任务的一些方法

本帖最后由 genab 于 2012-12-5 10:53 编辑

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

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

# The transmission remote login username
USERNAME="demo"

# The transmission remote login password
PASSWORD="domo"

# The transmission download dir
DLDIR="/root/Downloads"

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

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

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

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

#====================================================================

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

dist_check

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

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

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

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

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

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


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

MAX_WAIT_TIME = 10
MIN_UPLOAD_SPEED = 50 * 1024
db = {}

def donothing(status):
return status

def on_get_torrents_status(torrents_status):
      global db
      global MAX_WAIT_TIME
      global MIN_UPLOAD_SPEED
      tlist = []
      for torrent_id in torrents_status:
            torrent_info = torrents_status            
            if torrent_info['state'] == 'Seeding':
                if not db.has_key(torrent_id):
                  db = 0
                if torrent_info['upload_payload_rate'] < MIN_UPLOAD_SPEED:
                  db = db + 1
                else:
                  db = 0
                if db > MAX_WAIT_TIME:
                  db.pop(torrent_id)
                  tlist.append(client.core.remove_torrent(torrent_id, True).addCallback(donothing))
            iftorrent_info['state'] == 'Queued':
                  tlist.append(client.core.remove_torrent(torrent_id, True).addCallback(donothing))
            iftorrent_info['state'] == 'Error':
                  tlist.append(client.core.remove_torrent(torrent_id, True).addCallback(donothing))
      if len(tlist) > 0:
                defer.DeferredList(tlist).addCallback(Cleanup)
                time.sleep(3)
      else:
                Cleanup(True)

def Cleanup(status):
      global db
      client.disconnect()
      try:
          f = open('autoclean.db', 'w')
          f.write(json.dumps(db))
          f.close()
      except:
          db = {}
      reactor.stop()

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

def on_connect_fail(result):
    print "Connection failed!"
    print "result:", result

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


总结一下,三种方法各有优缺点。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

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 static/image/common/back.gif
因为RT有ratio group 和autodl,所以选择的比较多一点,因为对技术什么的也不是很懂,比较懒

RT刷起来感觉没有deluge给力

jaychous 发表于 2012-12-4 21:31:00

Yamateh 发表于 2012-12-4 21:19 static/image/common/back.gif
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 static/image/common/back.gif
deluge的脚本不适用于只安装deluged和deluge-web的盒子!
还有安装神马

具体我也不太清楚,我只安装deluged和deluge-web运行这个脚本会报错,而用一些一键安装脚本安装的deluge就没有这个问题,可能是GTK?

xf是我家媳妇 发表于 2012-12-4 22:49:31

Yamateh 发表于 2012-12-4 22:43 static/image/common/back.gif
具体我也不太清楚,我只安装deluged和deluge-web运行这个脚本会报错,而用一些一键安装脚本安装的deluge就 ...

不知道5G那个一键安装DELUGE有木有问题{:7_703:}

Yamateh@2 发表于 2012-12-4 22:52:36

xf是我家媳妇 发表于 2012-12-4 22:49 static/image/common/back.gif
不知道5G那个一键安装DELUGE有木有问题

一键安装的应该都木有问题,话说deluge这个脚本是专为5G小盒而生的

xf是我家媳妇 发表于 2012-12-4 23:14:43

Yamateh 发表于 2012-12-4 22:52 static/image/common/back.gif
一键安装的应该都木有问题,话说deluge这个脚本是专为5G小盒而生的

{:2_131:}对某些VPS很有用吶

Yamateh@2 发表于 2012-12-4 23:16:20

xf是我家媳妇 发表于 2012-12-4 23:14 static/image/common/back.gif
对某些VPS很有用吶

对于硬盘小的VPS都很有用{:7_740:}

xf是我家媳妇 发表于 2012-12-4 23:24:19

Yamateh 发表于 2012-12-4 23:16 static/image/common/back.gif
对于硬盘小的VPS都很有用

{:7_720:}貌似乃有很多吶

Yamateh@2 发表于 2012-12-4 23:27:13

xf是我家媳妇 发表于 2012-12-4 23:24 static/image/common/back.gif
貌似乃有很多吶

我就有一个50G的屌丝VPS,买不起大的盒子啊{:7_738:}

xf是我家媳妇 发表于 2012-12-4 23:28:26

Yamateh 发表于 2012-12-4 23:27 static/image/common/back.gif
我就有一个50G的屌丝VPS,买不起大的盒子啊

{:7_740:}俺滴60G比乃大了

Yamateh@2 发表于 2012-12-4 23:33:22

xf是我家媳妇 发表于 2012-12-4 23:28 static/image/common/back.gif
俺滴60G比乃大了

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

xf是我家媳妇 发表于 2012-12-4 23:35:10

Yamateh 发表于 2012-12-4 23:33 static/image/common/back.gif
你用的是哪家的,能不能偷偷PM我一下

{:7_740:}这是秘密吶

Yamateh@2 发表于 2012-12-4 23:38:11

xf是我家媳妇 发表于 2012-12-4 23:35 static/image/common/back.gif
这是秘密吶

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

sunshineyy 发表于 2012-12-4 23:44:26

支持一下
页: [1] 2
查看完整版本: 盒子自动删除任务的一些方法