Создано в рамках статьи для блога: Домашний Сервер: Часть 4 – Настройка Transmission daemon в контейнере LXC Proxmox-VE
Основной кодовой базой является программная платформа Node.js основанная на "браузерном" движке V8
Данное приложение необходимо для автоматической очистки скачанных медиа торрент файлов через transmission-daemon
согласно условиям:
- Если торрент скачан на
100%
и коэффициент отданного к скачанному (RATIO) больше, либо равен заданному в файлеsettings.json
сервиса transmission-daemon - Или кол-во дней на раздаче больше или равно заданному в конфигурации приложения.
Соответственно эти значения можно менять в файлах конфигурации.
Значение RATIO считывается из файла настроек transmission-daemon (путь по умолчанию
/etc/transmission-daemon/settings.json
) Значение интервала между датами указывается в файле конфигурации приложения
config.json
(см. раздел Конфигурирование)
История версий:
- v3.0.2 - (04.10.2024) 100% покрытие тестами. Исправление регулярного выражения для получения информации о торрент файле.
- v3.0.1 - (29.09.2024) Поддержка актуальности библиотек.
- v3.0.0 - (28.04.2024) Изменение архитектуры сборки. Теперь нет необходимости качать зависимости из npm. Заменена библиотека логирования на log4js. Покрытие юнит тестами. Удален фильтр по расширению файлов, теперь обрабатываются все торрент файлы.
- v2.1.0 - (03.04.2023) Добавлено сохранение метрик после полного выполнения работы приложения.
- v2.0.1 - (01.04.2023) Исправлена ошибка НЕ удаления торрента, если файл был удален ранее (к примеру из Plex).
- v2.0.0 - (29.11.2022) Полностью заменен файл torrentclear с bash версии на Node.js версию. Изменена и расширена логика обработки, улучшено логирование (уровни info, debug, etc) и многое другое.
- v1.0.2 - (17.10.2022) Заменена команда запуска Python на
python3
т.к. в Debian 11 удалён python2. - v1.0.1 - (26.01.2021) Удален параметр CLEARFLAG т.к. не используется
- v1.0.0 - (10.01.2021) Добавлено определение директории. Если директория, то загруженное удаляется вместе с файлами т.к. мы по окончании загрузки и так все файлы скопировали
- v0.9.17 - (24.03.2020) Изменен принцип сравнения "RATIO". Добавлено логирование RATIO
- v0.9.16 - (24.03.2020) Добавлены комментарии к коду
- v0.9.15 - (21.03.2020) Удалена отправка сообщений по email. Изменен принцип логирования. Небольшой рефакторинг
- v0.0.13 - (19.04.2018) Локальные перемнные в функции отправки email заменены на глобальные
- v0.0.11 - (18.04.2018) Добавлен комментарий к коду
- v0.0.10 - (18.04.2018) echo заменен на функцию логирования
- v0.0.9 - (18.04.2018) echo заменен на функцию логирования
- v0.0.8 - (18.04.2018) Добавлен комментарий и вывод информации в консоль
- v0.0.7 - (18.04.2018) Добавлен комментарий к коду
- v0.0.6 - (18.04.2018) Изменена команда подключения к Transmission и добавлены комментарии
- v0.0.5 - (18.04.2018) Добавлен комментарий к коду
- v0.0.4 - (18.04.2018) Первая версия
Достаточно поставить Node.js Команды для Proxmox LXC Debian 11.5 под root
apt update && apt upgrade -y && apt install -y curl wget
Ставим Node.js если еще не стоит
Пойти в https://github.com/nodesource/distributions/blob/master/README.md
Выбрать LTS версию
curl -fsSL https://deb.nodesource.com/setup_20.x -o nodesource_setup.sh
bash nodesource_setup.sh
apt update && apt install -y nodejs
node -v
v20.17.0
Далее создаем папку под приложение, делаем файл исполняемым. Создаем фейковый файл package.json
(нужно для корректного
определения корневой дирректории и нахождения файла конфигурации)
mkdir /opt/torrentclear
cd /opt/torrentclear
wget https://raw.githubusercontent.com/GregoryGost/transmission-torrentclear/refs/heads/main/dist/index.js
chmod +x index.js
echo '{"version":"3.0.2"}' > package.json
Создаем файл настроек и задаем свои параметры
nano /opt/torrentclear/config.json
{
"login": "transmission_login",
"password": "<your_password>"
}
Возможные параметры для конфигурирования
Обязательные:
login
- Логин авторизации для transmission-remote. Прописан в файлеsettings.json
самого Transmission. Как правило располагается по пути/etc/transmission-daemon/
password
- Пароль авторизации для transmission-remote
Опциональные:
node_env
- Режим использования приложения. Задатьdevelopment
если режим разработки. Default:production
log_level
- Уровень логирования. Default:info
. Для режима разработкиtrace
log_file_path
- Путь до файла сохранения логов. Default:/var/log/transmission/torrentdone.log
date_format
- Формат вывода даты в приложении. Для форматирования используется модуль moment Default:DD.MM.YYYY_HH:mm:ss
Example: 12.11.2022_21:54:03log_date_format
- Формат вывода даты в логах (log4js). Для форматирования используется модуль date-format Default:dd.MM.yyyy_hh:mm:ss.SSS
Example: 12.11.2022_21:54:03.254ip_address
- IP адрес для доступа к transmission. Default:127.0.0.1
tcp_port
- TCP порт для доступа к transmission. Default:9091
limit_time
- Разница во времени (в секундах) по которому файл удаляется если не достигнут RATIO (второе условие). Default:604800
(7 дней)settings_file_path
- Путь до файла с настройками transmission. Default:/etc/transmission-daemon/settings.json
Устанавливаем приложение как сервис systemd и ставим его в автозапуск
Приложение работает через базовый таймер systemd
По умолчанию проверка происходит каждый час
cp /opt/torrentclear/torrentclear.service /etc/systemd/system/
cp /opt/torrentclear/torrentclear.timer /etc/systemd/system/
systemctl daemon-reload
systemctl enable torrentclear.timer
systemctl start torrentclear.timer
systemctl status torrentclear.timer
● torrentclear.timer - Transmission torrent clear process timer
Loaded: loaded (/etc/systemd/system/torrentclear.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Thu 2022-12-08 22:26:20 MSK; 2min 35s ago
Trigger: Thu 2022-12-08 23:00:00 MSK; 31min left
Triggers: ● torrentclear.service
Dec 08 22:26:20 TORRENT systemd[1]: Started Transmission torrent clear process timer.
systemctl status torrentclear.service
● torrentclear.service - Transmission torrent clear cron worker
Loaded: loaded (/etc/systemd/system/torrentclear.service; disabled; vendor preset: enabled)
Active: inactive (dead) since Thu 2022-12-08 22:26:20 MSK; 3min 34s ago
TriggeredBy: ● torrentclear.timer
Process: 12323 ExecStart=/usr/bin/node main.js (code=exited, status=0/SUCCESS)
Main PID: 12323 (code=exited, status=0/SUCCESS)
CPU: 160ms
Для настройки таймера отредактируйте файл torrentclear.timer
и его параметр OnCalendar
Более детальное описание параметров таймера и
OnCalendar в частности
Проверить свои таймеры можно с помощью встроенной утилиты systemd-analyze calendar
Пример: systemd-analyze calendar --iterations=2 "Mon *-05~3"
Original form: Mon *-05~3
Normalized form: Mon *-05~03 00:00:00
Next elapse: Mon 2023-05-29 00:00:00 MSK
(in UTC): Sun 2023-05-28 21:00:00 UTC
From now: 5 months 18 days left
Iter. #2: Mon 2028-05-29 00:00:00 MSK
(in UTC): Sun 2028-05-28 21:00:00 UTC
From now: 5 years 5 months left
Стоит обновить Node.js. Как пример обновление на 20 LTS версию.
curl -fsSL https://deb.nodesource.com/setup_20.x -o nodesource_setup.sh
bash nodesource_setup.sh
apt update && apt upgrade -y
Для обновления можно просто перекачать index.js
файл
wget -O index.js https://raw.githubusercontent.com/GregoryGost/transmission-torrentclear/refs/heads/main/dist/index.js
Если вы хотите обновить из другой ветки, просто поменяйте её название в пути скачивания
wget -O index.js https://raw.githubusercontent.com/GregoryGost/transmission-torrentclear/refs/heads/develop/dist/index.js
Приложение по умолчанию пишет результат своей работы в LOG файл torrentclear.log
Log файл расположен по пути, где обычно хранятся все лог файлы самого transmisson-daemon:
/var/log/transmission/torrentclear.log
Начиная с версии 2.0.0 в torrentclear
расположение лог файлов можно задавать самому через конфигурацию. Соответственно
необходимо изменять настройки ротации с учётом нового расположения.
Ротация лог файлов обеспечивается базовой подсистемой самой ОС logrotate.
Ротация происходит для всех лог файлов в папке /var/log/transmission/
Расположение файла настройки ротации логов:
/etc/logrotate.d/transmission
После создания или загрузки файла настройки, необходимо перезапустить службу logrotate:
systemctl restart logrotate.service
systemctl status logrotate.service
Все исходные материалы для проекта распространяются по лицензии GPL v3.
Вы можете использовать проект в любом виде, в том числе и для коммерческой деятельности, но стоит помнить, что автор
проекта не дает никаких гарантий на работоспособность исполняемых файлов, а так же не несет никакой ответственности по
искам или за нанесенный ущерб.
Этот репозиторий содержит ссылки на все используемые модули и их лицензии. Они собраны в специальный файл лицензий. Их авторы самостоятельно несут (или не несут) ответственность за качество, стабильность и работу этих модулей.
GregoryGost - https://gregory-gost.ru