Задачу распространения контента мы более или менее успешно решили. Теперь необходимо решить задачу по удалению снятых с раздачи файлов контента. Силами "rtorrent" это не решается, проще всего мне показалось реализовать это с помощью по файлового сравнения содержимого директорий хранения "торрент"-файлов и файлов контента с целью выявления непарных и удаления таковых.
Пишем скрипт для Debian Lenny.
# touch /usr/local/etc/torrent/regulation.sh
# chmod ugo+x /usr/local/etc/torrent/regulation.sh
# chmod ugo+x /usr/local/etc/torrent/regulation.sh
#!/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
DATE=`date +"%Y-%m-%d %H:%M:%S"`
FILES="/var/lib/share/files"
TORRENTS="/var/lib/share/torrents"
# Переходим в директорию хранилища файлов
cd "${FILES}"
# Перебираем в цикле все объекты
for FILE in *
do
if [ ! -f "${TORRENTS}/${FILE}.torrent" ]
then
rm -f "${FILE}"
fi
done
exit 0
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
DATE=`date +"%Y-%m-%d %H:%M:%S"`
FILES="/var/lib/share/files"
TORRENTS="/var/lib/share/torrents"
# Переходим в директорию хранилища файлов
cd "${FILES}"
# Перебираем в цикле все объекты
for FILE in *
do
if [ ! -f "${TORRENTS}/${FILE}.torrent" ]
then
rm -f "${FILE}"
fi
done
exit 0
Пишем скрипт для Windows 2003/2008.
Располагаем скрипт "regulation.bat" в директории "c:\var\lib":
@echo off
set FILES=c:\var\lib\share\files
set TORRENTS=c:\var\lib\share\torrents
chdir /D %FILES%
for %%i in (*) do (
if not exist "%TORRENTS%\%%i.torrent" (
del /F /Q "%FILES%\%%i"
)
)
exit 0
set FILES=c:\var\lib\share\files
set TORRENTS=c:\var\lib\share\torrents
chdir /D %FILES%
for %%i in (*) do (
if not exist "%TORRENTS%\%%i.torrent" (
del /F /Q "%FILES%\%%i"
)
)
exit 0
Удобнее всего вызывать этот скрипт сразу после запуска "rsync", что должна будет загрузить новые "торрент"-файлы.
Для Debian Lenny это сделаем так:
# cat /usr/local/etc/torrent/rsync.sh
....
/usr/local/etc/torrent/regulation.sh
exit 0
/usr/local/etc/torrent/regulation.sh
exit 0
Для Windows 2003/2008 осуществим запуск скрипта размещением в файле "/var/lib/rsync/start-rsync.bat" следующей команды:
....
call c:\var\lib\regulation.bat
exit 0
call c:\var\lib\regulation.bat
exit 0
Для первичного сервера распространения нужно чуть дополнить скрипт вторым проходом, который будет проверять наличие пары не только "торрент"-файла для файла контента, но и наоборот; на вторичных серверах "торрент"-файлами управляет утилита "rsync", а на первичном необходимо вовремя выявлять исчезновение файла контента для своевременного удаления "торрент"-файла. В общем, к общему скрипту для Linux "/usr/local/etc/torrent/regulation.sh" на первичном сервере делаем следующее дополнение:
# cat /usr/local/etc/torrent/regulation.sh
....
# Переходим в директорию "торрент"-файлов
cd "${TORRENTS}"
# Перебираем в цикле все объекты
for FILE in *
do
# Выводим предполагаемое верное имя файла без расширения ".torrent"
TEMP=`echo "${FILE}" | rev | cut -c 9- | rev`
if [ ! -f "${FILES}/${TEMP}" ]
then
rm -f "${FILE}"
fi
done
exit 0
# Переходим в директорию "торрент"-файлов
cd "${TORRENTS}"
# Перебираем в цикле все объекты
for FILE in *
do
# Выводим предполагаемое верное имя файла без расширения ".torrent"
TEMP=`echo "${FILE}" | rev | cut -c 9- | rev`
if [ ! -f "${FILES}/${TEMP}" ]
then
rm -f "${FILE}"
fi
done
exit 0