自從在這個路由上架設了這個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