自從在這個路由上架設了這個Blog,就不得不考慮穩定性的問題了。如果木有神馬意外的話,穩定性還是可以的。
但是,就在昨天,一個失誤,把路由器的電源短路了,然後掛在路由下的transmission,幾個大種子的resume都損壞了,混PT嘛,小水管就是為了多掛幾個種,多混點積分而已。
幾個10+G的,1個100+G的要重新Hash,用電腦Hash都費時了,更不說用只有500Mhz,木有磁盤控制器的路由器了,為此,看了下transmission的文檔,寫了這個腳本。
resume文件損壞了,只要用備份文件還原上去就不用重新校驗了,因為是已經下載好的種子,所以一般沒有問題,磁盤損壞除外。
#!/bin/sh
BAKDIR=/mmc/; #备份文件存放路径
RESUMEDIR=/mmc/root/transmission/resume; #resume文件所在路径
time=3; #停顿时间,如果备份失败,可以尝试加大停顿时间
resume=resume; #备份文件名,不包含扩展名.
#COMMAND="transmission-remote 127.0.0.1:9091 --auth=transmission登录用户:登录密码"
COMMAND="transmission-remote 127.0.0.1:9091";
$COMMAND -t $TR_TORRENT_ID -S > /dev/null;
sleep $time;
if [ ! -e $BAKDIR/$resume.tar.bz2 ] && [ -e $BAKDIR/AddByResumeBaker ] ; then
mv -f $BAKDIR/AddByResumeBaker $BAKDIR/AddByResumeBaker.old;
fi
if [ -e $BAKDIR/$resume ] ; then
mv -f $BAKDIR/$resume $BAKDIR/$resume.old;
fi
if [ ! -e $BAKDIR/AddByResumeBaker ] ; then
if [ -e $BAKDIR/$resume.tar.bz2 ] ; then
mv -f $BAKDIR/$resume.tar.bz2 $BAKDIR/$resume.tar.bz2.old
fi
cd $RESUMEDIR ;
tar -rf $BAKDIR/$resume ./;
touch $BAKDIR/AddByResumeBaker;
elif [ -e $BAKDIR/$resume.tar.bz2 ] && [ -e $BAKDIR/AddByResumeBaker ] ; then
RESUMEFILE=$TR_TORRENT_NAME.`echo $TR_TORRENT_HASH|cut -c1-16`.resume;
cd $BAKDIR;
tar -jxf $BAKDIR/$resume.tar.bz2;
cd $RESUMEDIR ;
tar -rf $BAKDIR/$resume ./$RESUMEFILE;
fi
cd $BAKDIR;
tar -jcf $BAKDIR/$resume.tar.bz2 ./$resume;
$COMMAND -t $TR_TORRENT_ID -s > /dev/null;
rm -f $BAKDIR/$resume;
exit 0;
注意一下的是第6,7行,如果你的登錄transmission需要用戶名和密碼的話,勞煩這裡也要加上去。如果和我一樣,可以匿名登錄的話,就不用改了。
使用舉例:
將上述腳本保存為resumebaker.sh後,(如果用複製粘貼的,注意將換行符改成Unix的,可以用Notepad++)。
mv resumebaker.sh /opt/bin/
chmod +x /opt/bin/resumebaker.sh
然後在transmission的配置文件settings.json中找到這兩行,(如果你的配置文件沒有這兩行,可能要升級transmission了)
"script-torrent-done-enabled": true,
"script-torrent-done-filename": "/opt/bin/resumebaker.sh",
true代表啟用 下載完成後執行腳本的功能,/opt/bin/resumebaker.sh代表每當一個種子下載完成後執行的腳本,也就是這個自動備份腳本。放到什麼路徑就填什麼路徑。
腳本會自動檢測是否存在備份文件,如果不存在備份文件,會備份所有resume文件,如果已經存在,則會將新下載完那個種子的resume文件增加到備份文件中。
Update:
部分嵌入式系統如Tomato,tar可能不完整,不支持 -r 參數,需要安裝完整版的tar。
Optware 上執行
ipkg install tar
Entware 上執行
opkg install tar
然後在腳本中的tar加上絕對路徑,如:
/opt/bin/tar