-
Notifications
You must be signed in to change notification settings - Fork 5
/
torrentclear
156 lines (137 loc) · 6.94 KB
/
torrentclear
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#!/bin/bash
# Torrent Clear Script v0.0.13
# Скрипт для Cron
# Очистка торрентов в Transmission, которые достигли коэффициента = 2
# И которые достигли лимита активности раздачи: По умолчанию 7 дней
# Расписание запуска по умолчанию: Каждый час
#
# Протестировано на:
# Debian GNU/Linux 9.4 (stretch)
# transmission-daemon 2.92 (14714)
#
# Настройка Cron:
# cd /etc/cron.hourly/
# положить в эту папку файл torrentclear и дать права на выполнение
# sudo chmod +x torrentclear
#
# Мониторинг скрипта:
# sudo tail -f /var/log/syslog | grep transremover
#
# Определяем переменные
PREF="transremover:"
TR_LOGIN="user"
TR_PASSWORD="12345"
TR_CONNECT="transmission-remote 192.168.88.21:9091 -n $TR_LOGIN:$TR_PASSWORD"
NOWDATE=$(date +%s) # Текущая дата в секундах | Желательно, чтобы была настроена NTP синхронизация на ОС
LIMITTIME="604800" # Через какое кол-во дней (7 дней = 604800 секунд) торрент должен быть удален, даже если он не достиг коэффициента раздачи = 2
COUNTER=0
# ФУНКЦИИ
# Функция отправки оповещения на почту
# Пример отправки письма:
# emailsend "Тема письма" "Основной текст письма"
emailsend(){
#
# Должен быть установлен пакет для работы с почтой
# sudo apt install msmtp
#
# $1 - Тема письма
# $2 - Текст письма
# Создаем временный файл с текстом сообщения
TMP=$(mktemp)
echo "<div style=\"font-weight:bold;font-size:14px;color:#535353;\">" >> $TMP
echo "$2" >> $TMP
echo "</div>" >> $TMP
# Задаем переменные для отправки email
MAIL_SERVER="smtp.yandex.ru"
MAIL_PORT="465"
MAIL_DATE=$(date +"%d %b %Y %T")
MAIL_FROM="noreply@my-domen.ru"
MAIL_TO="my@my-domen.ru"
MAIL_PASSWORD="my_password_for_mail_from"
MAIL_SUBJECT="$1"
MAIL_TEXT=$(cat $TMP)
MAIL_MESSAGE="Date: ${MAIL_DATE}
\nFrom: ${MAIL_FROM}
\nTo: ${MAIL_TO}
\nSubject: ${MAIL_SUBJECT}
\nContent-Type: text/html; charset=UTF-8
\n\n${MAIL_TEXT}"
# Отправляем email сообщение
echo -e ${MAIL_MESSAGE} | /usr/bin/msmtp \
--host=${MAIL_SERVER} \
--port=${MAIL_PORT} \
--tls=on \
--tls-certcheck=off \
--tls-starttls=off \
--auth=login \
--user=${MAIL_FROM} \
--passwordeval="echo ${MAIL_PASSWORD}" \
-f ${MAIL_FROM} ${MAIL_TO}
# Удаляем временный файл
rm $TMP
}
# ВЫПОЛНЕНИЕ
# Проверяем запущен ли transmission-daemon
# Если нет, то сразу завершаем выполнение скрипта
TR_STATUS=$(systemctl status transmission-daemon | grep 'Active' | grep -Eo '\([a-z]+\)' | sed -r 's/(\(|\))//g')
if [[ $TR_STATUS != "running" ]]; then
logger "$PREF Служба transmission-daemon не запущена! Дальнейшая обработка не производится. Выход!"
exit 0;
else
logger "$PREF Служба transmission-daemon активна. Старт запуска обработки торрентов..."
fi
# Если сервис запущен, работаем дальше
# Выбираем все торренты со 100% выполнением и коэффициентом раздачи = 2
# Получаем все ID торрентов.
# Обрабатываем их в цикле
for TORRENTID in $($TR_CONNECT -l | grep -Eo '^ *([0-9]+)' | sed -r 's/[^0-9]//g')
do
# Получаем имя обрабатываемого торрента для логов
TR_NAME=$($TR_CONNECT -t$TORRENTID -i | grep 'Name:' | grep -Eo '\:\s(.*+)' | sed -r 's/^\:\s//')
# Дата окончания загрузки торрента в формате: Wed Apr 18 13:00:35 2018
TR_DATEDONE=$($TR_CONNECT -t$TORRENTID -i | grep 'Date finished:' | grep -Eo '\:\s{4}.*+' | sed -r 's/^\:\s{4}//')
TR_DATEDONE=$(date -d "$TR_DATEDONE" +%s)
# Получаем процент загрузки торрента
PERCENT=$($TR_CONNECT -t$TORRENTID -i | grep 'Percent Done:' | sed -r 's/(\s|[a-zA-Z]|\:)//g')
# Получаем коэффициент раздачи торрента
RATIO=$($TR_CONNECT -t$TORRENTID -i | grep 'Ratio:' | sed -r 's/(\s|[a-zA-Z]|\:)//g')
# Какой торрент обрабатываем
logger "$PREF Проверяем торрент -- $TR_NAME"
# Производим сравнение
if [[ $PERCENT = "100%" && $RATIO = "2.0" ]]; then
# Нашли такой торрент
# Останавливаем и удаляем торрент из Transmission
$TR_CONNECT -t$TORRENTID -S
REMOVE=$($TR_CONNECT -t$TORRENTID -r | grep -Eo '\"([a-z]+)\"' | sed -r 's/\"//g')
# Проверка удаления
if [[ $REMOVE != "success" ]]; then
# Удаление не удалось
logger "$PREF Ошибка в удалении торрента $TR_NAME из Transmission по достижении коэффициента раздачи"
else
# Удаление успешно
logger "$PREF Торрент $TR_NAME успешно удален по достижении коэффициента раздачи"
fi
else
# Торрент не соответствует 100% готовности и коэффициенту 2.0
# Проверяем разницу текщей даты и даты окончания загрузки. Сравниваем с лимитом активности торрента
# Считаем разницу между текущей датой и датой окончания загрузки торрента
DATEDIFF=$(($NOWDATE - $TR_DATEDONE))
# Если разница дат больше или равна лимиту активности торрента, удаляем его
if [ $DATEDIFF -ge $LIMITTIME ]; then
# Останавливаем и удаляем торрент из Transmission
$TR_CONNECT -t$TORRENTID -S
REMOVE=$($TR_CONNECT -t$TORRENTID -r | grep -Eo '\"([a-z]+)\"' | sed -r 's/\"//g')
# Проверка удаления
if [[ $REMOVE != "success" ]]; then
# Удаление не удалось
logger "$PREF Ошибка в удалении торрента $TR_NAME из Transmission по достижении лимита активности раздачи"
else
# Удаление успешно
logger "$PREF Торрент $TR_NAME успешно удален по достижении лимита активности раздачи в \"$LIMITTIME\" сек."
fi
fi
fi
COUNTER=$[COUNTER + 1]
done
logger "$PREF Обработка торрентов закончена. Всего торрентов обработано: $COUNTER"
exit 0;