OpenWrt на D-Link DNS-325: установка Transmission, настройка каталогов, скрипт
Предпосылка: OpenWrt уже стоит, диск смонтирован на /mnt/data, swap на HDD и при необходимости Samba для /mnt/data — как в основной заметке про прошивку и в гайде установки. Пакеты ставлю через apk (на старых сборках вместо него — opkg, имена пакетов проверь через поиск). Устройство: D-Link DNS-325, RAM порядка 256 MiB.
1. Перед началом
Выполни на NAS и убедись, что данные не на overlay, а на большом томе:
df -h /mnt/data
Ожидаемо: отдельный раздел (у меня /dev/sda1 на /mnt/data, размер порядка терабайт). Если /mnt/data не смонтирован — сначала доведи монтирование и swap по основному гайду.
2. Каталоги на /mnt/data
Зачем: заранее развести данные по папкам: корень для торрентов (/mnt/data/torrents), Syncthing, общие файлы и фото. Отдельный каталог /mnt/data/video здесь не создаём: готовое видео с торрентов по схеме ниже кладётся в /mnt/data/torrents/video (создаётся в п. 3.9 внутри download_dir, из‑за ujail так и нужно).
2.1. Каталоги одной командой:
mkdir -p /mnt/data/torrents /mnt/data/syncthing /mnt/data/files /mnt/data/photos
2.2. Права на все четыре каталога:
chmod 775 /mnt/data/torrents /mnt/data/syncthing /mnt/data/files /mnt/data/photos
2.3. Владельцы каталогов под отдельных пользователей Samba и демона: каталоги для обычных данных и Syncthing — под пользователя с паролем Samba (sambouser, см. п. 3.6); торренты позже, в п. 3.2, отдаются пользователю transmission. На этом шаге задай владельца только для syncthing, files, photos (имя пользователя подставь своё):
chown -R sambouser:sambouser /mnt/data/syncthing /mnt/data/files /mnt/data/photos
Заметка: /mnt/data/torrents пока не трогаем или оставь как есть до п. 3.2, где выполняется chown -R transmission:transmission /mnt/data/torrents. Шары Samba настраиваются в п. 3.6: вход по логину и паролю (sambouser, при необходимости отдельно transmission на шару watch).
2.4. Проверка после шага — выполни и сохрани вывод (пригодится для отладки):
date uptime free -m df -h / /overlay /mnt/data cat /proc/swaps
Диск ~1.8 T, свободно ~1.7 T; overlay ~81.6 M свободно из 106 M; swap-файл /mnt/data/.system/swapfile ~4 G, использование 0; load 0.00. Полный лог с консоли:
root@OpenWrt:~# df -h /mnt/data
Filesystem Size Used Available Use% Mounted on
/dev/sda1 1.8T 4.0G 1.7T 0% /mnt/data
root@OpenWrt:~# mkdir -p /mnt/data/torrents /mnt/data/syncthing /mnt/data/files /mnt/data/photos
root@OpenWrt:~# chmod 775 /mnt/data/torrents /mnt/data/syncthing /mnt/data/files /mnt/data/photos
root@OpenWrt:~# chown -R sambouser:sambouser /mnt/data/syncthing /mnt/data/files /mnt/data/photos
root@OpenWrt:~# date
Sun Mar 22 06:41:09 GMT 2026
root@OpenWrt:~# uptime
06:41:14 up 9:02, load average: 0.00, 0.00, 0.00
root@OpenWrt:~# free -m
total used free shared buff/cache available
Mem: 249464 23656 21880 3656 203928 173864
Swap: 4194300 0 4194300
root@OpenWrt:~# df -h / /overlay /mnt/data
Filesystem Size Used Available Use% Mounted on
overlayfs:/overlay 106.0M 19.7M 81.6M 19% /
/dev/ubi0_2 106.0M 19.7M 81.6M 19% /overlay
/dev/sda1 1.8T 4.0G 1.7T 0% /mnt/data
root@OpenWrt:~# cat /proc/swaps
Filename Type Size Used Priority
/mnt/data/.system/swapfile file 4194300 0 -2
Заметка: на BusyBox/OpenWrt колонки free -m могут вводить в заблуждение; при сомнениях смотри df и /proc/meminfo.
3.Transmission
3.1. Установка пакетов
apk update apk add transmission-daemon transmission-web luci-app-transmission
Опционально русский LuCI: apk add luci-i18n-transmission-ru.
3.2. Каталог торрентов и владелец
mkdir -p /mnt/data/torrents chown -R transmission:transmission /mnt/data/torrents chmod 775 /mnt/data/torrents /etc/init.d/transmission enable
3.3. Включение в UCI (по умолчанию enabled='0', без этого init не стартует демон):
/etc/init.d/transmission start
Если видишь: Transmission not enabled. Please enable in /etc/config/transmission — выполни:
uci set transmission.@transmission[0].enabled='1' uci commit transmission /etc/init.d/transmission start /etc/init.d/transmission status
Ожидаемо: running. Проверка процесса:
ps w | grep -E '[t]ransmission-daemon'
У меня демон шёл через ujail, строка вида /usr/bin/transmission-daemon -f -g /tmp/transmission.
3.4. Перенос загрузок с /tmp на диск (иначе большие файлы забивают RAM/tmp):
mkdir -p /mnt/data/torrents/incomplete chown -R transmission:transmission /mnt/data/torrents uci set transmission.@transmission[0].download_dir='/mnt/data/torrents' uci set transmission.@transmission[0].incomplete_dir='/mnt/data/torrents/incomplete' uci set transmission.@transmission[0].incomplete_dir_enabled='1' uci commit transmission /etc/init.d/transmission restart uci show transmission | grep -E 'download_dir|incomplete' /etc/init.d/transmission status
Ожидаемо: в выводе uci show пути на /mnt/data/torrents и incomplete, статус running. Лог с моей консоли:
root@OpenWrt:~# /etc/init.d/transmission start
Transmission not enabled. Please enable in /etc/config/transmission
root@OpenWrt:~# uci set transmission.@transmission[0].enabled='1'
root@OpenWrt:~# uci commit transmission
root@OpenWrt:~# /etc/init.d/transmission start
root@OpenWrt:~# /etc/init.d/transmission status
running
root@OpenWrt:~# ps w | grep -E '[t]ransmission-daemon'
4394 root 2172 SN {transmission} /sbin/ujail -t 5 -n transmission -S /etc/seccomp/transmission-daemon.json -U transmission
4419 transmis 8088 SN /usr/bin/transmission-daemon -f -g /tmp/transmission
root@OpenWrt:~# mkdir -p /mnt/data/torrents/incomplete
root@OpenWrt:~# chown -R transmission:transmission /mnt/data/torrents
root@OpenWrt:~# uci set transmission.@transmission[0].download_dir='/mnt/data/torrents'
root@OpenWrt:~# uci set transmission.@transmission[0].incomplete_dir='/mnt/data/torrents/incomplete'
root@OpenWrt:~# uci set transmission.@transmission[0].incomplete_dir_enabled='1'
root@OpenWrt:~# uci commit transmission
root@OpenWrt:~# /etc/init.d/transmission restart
root@OpenWrt:~# uci show transmission | grep -E 'download_dir|incomplete'
transmission.@transmission[0].download_dir='/mnt/data/torrents'
transmission.@transmission[0].incomplete_dir='/mnt/data/torrents/incomplete'
transmission.@transmission[0].incomplete_dir_enabled='1'
root@OpenWrt:~# /etc/init.d/transmission status
running
3.5. Watch-каталог (подкинул .torrent — пошла закачка):
mkdir -p /mnt/data/torrents/watch chown -R transmission:transmission /mnt/data/torrents chmod 775 /mnt/data/torrents/watch uci set transmission.@transmission[0].watch_dir='/mnt/data/torrents/watch' uci set transmission.@transmission[0].watch_dir_enabled='1' uci commit transmission /etc/init.d/transmission restart
3.6. Samba: пользователи и доступ к папкам (watch и не только)
У меня отдельная шара torr_download → /mnt/data/torrents/watch, шара nas на /mnt/data. В luci-app-samba4 нет штатного поля «Force user = transmission» (есть Force Root → в конфиг уходит force user = root). Поле Allowed users задаёт valid users — кто может подключиться к шаре. В этой статье везде вход по логину и паролю, без гостевого режима (подробнее и проверки — в OPENWRT_DNS325_SOFTWARE_SETTINGS.md, DNS325-SW-01).
Основная схема: пользователь sambouser + членство в группе transmission (один логин на шары с файлами и запись в торренты при необходимости):
Логин латиницей (пример — sambouser). Нужны: запись в /etc/passwd, в /etc/group строка группы transmission с членами transmission,sambouser (имена через запятую в одном поле; не путать с двоеточием между именами). Проверка: id sambouser — в списке групп должна быть transmission.
Права на каталоги (подстрой под свои пути шар):
chown -R sambouser:sambouser /mnt/data/syncthing /mnt/data/files /mnt/data/photos
find /mnt/data/syncthing /mnt/data/files /mnt/data/photos -type d -exec chmod 775 {} \;
find /mnt/data/syncthing /mnt/data/files /mnt/data/photos -type f -exec chmod 664 {} \;
chown -R transmission:transmission /mnt/data/torrents
find /mnt/data/torrents -type d -exec chmod 775 {} \;
find /mnt/data/torrents -type f -exec chmod 664 {} \;
Если используешь incoming → watch по cron, при отказе записи с Windows: chown sambouser:transmission /mnt/data/torrents/incoming и chmod 775 на этот каталог.
smbpasswd -a sambouser uci set samba4.@sambashare[N].guest_ok='no' uci set samba4.@sambashare[N].users='sambouser' uci commit samba4 /etc/init.d/samba4 restart
Подставь вместо [N] индексы своих шар (uci show samba4). Проверка: grep -A20 '^\[имя_шары\]' /var/etc/smb.conf — должны быть valid users = sambouser и guest ok = no.
Windows: несколько букв дисков к одному хосту иногда дают ошибку 1219 — используй один диск (например Z:) и пути вроде Z:\torrents\watch, либо сними все net use к этому NAS и подключи заново.
Альтернатива: шару на watch можно открыть только для системного пользователя transmission (smbpasswd -a transmission, в LuCI Allowed users = transmission, гостям запретить), а остальные шары оставить на sambouser — тогда на watch заходишь под OPENWRT\transmission, на остальное — под sambouser. Учётку в Windows лучше сохранить в диспетчере учётных данных или через net use … /persistent:yes.
3.7. Проверка watch: положи тестовый .torrent в /mnt/data/torrents/watch (или скинь по SMB в torr_download) — задание должно появиться в веб-морде Transmission. Веб обычно: http://IP_NAS:9091/transmission/web/ (порт уточни: uci show transmission).
3.8. Скрипты
3.8.1. transmission-done-move-video.sh — вызывается Transmission как script-torrent-done (в окружении есть TR_*). Если запустить тот же файл из cron без этих переменных, скрипт работает в режиме периодического сканирования по RPC (завершённые на 100% торренты с видео → --move в DEST_VIDEO). Порт и логин/пароль RPC при необходимости подставляются из UCI. Сохрани на NAS в /mnt/data/torrents/transmission-done-move-video.sh:
#!/bin/sh
# transmission-done-move-video.sh — скрипт для Transmission «по завершении торрента» (script-torrent-done).
# Переносит данные торрента в каталог с видео ТОЛЬКО если среди файлов есть «видео-расширения».
# Перенос через transmission-remote --move (не через mv!), чтобы не ломать пути и сидирование.
#
# Официальные переменные окружения (см. transmission/docs/Scripts.md):
# TR_APP_VERSION
# TR_TIME_LOCALTIME
# TR_TORRENT_BYTES_DOWNLOADED
# TR_TORRENT_DIR — каталог загрузок (родитель для данных торрента)
# TR_TORRENT_HASH
# TR_TORRENT_ID — ID для transmission-remote -t
# TR_TORRENT_LABELS — метки через запятую
# TR_TORRENT_NAME — имя торрента (папка или имя файла внутри TR_TORRENT_DIR)
# TR_TORRENT_PRIORITY
# TR_TORRENT_TRACKERS
#
# Зависимости на NAS: transmission-daemon; отдельно пакет transmission-remote (в OpenWrt apk пакет transmission-cli его НЕ содержит).
#
# Установка на OpenWrt (пример):
# — Положи скрипт ВНУТРИ download_dir (например /mnt/data/torrents/…), иначе ujail не даст его выполнить.
# — UCI: script_torrent_done_filename и script_torrent_done_enabled (НЕ опция script_torrent_done).
# cp transmission-done-move-video.sh /mnt/data/torrents/transmission-done-move-video.sh
# chmod 750 /mnt/data/torrents/transmission-done-move-video.sh
# chown transmission:transmission /mnt/data/torrents/transmission-done-move-video.sh
# uci set transmission.@transmission[0].script_torrent_done_filename='/mnt/data/torrents/transmission-done-move-video.sh'
# uci set transmission.@transmission[0].script_torrent_done_enabled='1'
# uci commit transmission && /etc/init.d/transmission restart
# grep script-torrent-done /tmp/transmission/settings.json
#
# При RPC с паролем: задай RPC_USER / RPC_PASS ниже ИЛИ включи загрузку из UCI (блок ниже).
# Вызов из демона идёт с пустым PATH и без твоих переменных окружения — без UCI/полного PATH
# «вручную сработало, по завершении торрента — нет» часто из‑за RPC или отсутствия find/uci в PATH.
# ============ настройки ============
# Для ujail / procd: busybox find, uci, head должны находиться без опоры на интерактивный PATH.
export PATH="/usr/sbin:/usr/bin:/sbin:/bin:${PATH:-}"
# Куда переносить «видео-торренты» (каталог должен существовать и быть доступен пользователю transmission).
# По умолчанию — ВНУТРИ download_dir (/mnt/data/torrents/...): иначе на OpenWrt ujail не монтирует /mnt/data/video,
# и transmission-remote --move в «соседнюю» папку не сработает (Permission denied / файл не переезжает).
DEST_VIDEO="${DEST_VIDEO:-/mnt/data/torrents/video}"
# Лог на диске (не путать с UCI: /etc/config/transmission). Нужны права у пользователя transmission; внутри download_dir надёжнее для ujail.
LOG_FILE="${LOG_FILE:-/mnt/data/torrents/transmission-done.log}"
# transmission-remote: адрес демона (на том же NAS — localhost).
RPC_HOST="${RPC_HOST:-127.0.0.1}"
RPC_PORT="${RPC_PORT:-9091}"
# Если в LuCI включена аутентификация RPC — задай вручную ИЛИ оставь пустым (подставится из UCI).
RPC_USER="${RPC_USER:-}"
RPC_PASS="${RPC_PASS:-}"
# Порт и логин/пароль RPC из UCI — иначе при rpc_authentication_required transmission-remote из скрипта падает.
UCI_BIN="/sbin/uci"
[ -x "$UCI_BIN" ] || UCI_BIN="uci"
if _rp="$("$UCI_BIN" -q get transmission.@transmission[0].rpc_port 2>/dev/null)" && [ -n "$_rp" ]; then
RPC_PORT="$_rp"
fi
_rpc_auth_required="$("$UCI_BIN" -q get transmission.@transmission[0].rpc_authentication_required 2>/dev/null)"
case "$_rpc_auth_required" in
1|true|yes|on)
[ -z "$RPC_USER" ] && RPC_USER="$("$UCI_BIN" -q get transmission.@transmission[0].rpc_username 2>/dev/null)"
[ -z "$RPC_PASS" ] && RPC_PASS="$("$UCI_BIN" -q get transmission.@transmission[0].rpc_password 2>/dev/null)"
;;
esac
# ============ конец настроек ============
log_msg() {
_ts="$(date '+%Y-%m-%d %H:%M:%S' 2>/dev/null || date)"
_line="$_ts $*"
logger -t transmission-done "$_line"
[ -n "$LOG_FILE" ] && echo "$_line" >>"$LOG_FILE" 2>/dev/null
}
TR_BIN="transmission-remote"
[ -x /usr/bin/transmission-remote ] && TR_BIN="/usr/bin/transmission-remote"
TR_REMOTE_CMD() {
if [ -n "$RPC_USER" ] && [ -n "$RPC_PASS" ]; then
"$TR_BIN" "$RPC_HOST:$RPC_PORT" -n "$RPC_USER:$RPC_PASS" "$@"
else
"$TR_BIN" "$RPC_HOST:$RPC_PORT" "$@"
fi
}
extract_field() {
_key="$1"
sed -n "s/^ *${_key}: //p" | head -n 1
}
has_video_files() {
_path="$1"
find "$_path" -type f \( \
-iname '*.mkv' -o -iname '*.mp4' -o -iname '*.m4v' -o -iname '*.avi' -o -iname '*.mov' \
-o -iname '*.wmv' -o -iname '*.mpeg' -o -iname '*.mpg' -o -iname '*.m2ts' -o -iname '*.ts' \
-o -iname '*.webm' -o -iname '*.flv' -o -iname '*.vob' -o -iname '*.asf' -o -iname '*.3gp' \
-o -iname '*.ogv' -o -iname '*.divx' -o -iname '*.xvid' \
\) 2>/dev/null | head -n 1
}
move_if_video() {
_id="$1"
_target="$2"
_name="$3"
case "$_target" in
"$DEST_VIDEO"|"$DEST_VIDEO"/*)
#log_msg "SKIP: already under $DEST_VIDEO (id=$_id name=$_name)"
return 0
;;
esac
if [ ! -e "$_target" ]; then
log_msg "ERROR: path does not exist: $_target (id=$_id)"
return 0
fi
_has_video="$(has_video_files "$_target")"
if [ -z "$_has_video" ]; then
#log_msg "SKIP: no video-like files in torrent id=$_id name=$_name path=$_target"
return 0
fi
log_msg "MOVE: video detected, id=$_id name=$_name -> $DEST_VIDEO"
if TR_REMOTE_CMD -t "$_id" --move "$DEST_VIDEO"; then
log_msg "OK: transmission-remote --move id=$_id -> $DEST_VIDEO"
else
log_msg "ERROR: transmission-remote --move failed id=$_id (check RPC auth, ujail, paths)"
fi
}
scan_mode() {
_ids="$(TR_REMOTE_CMD -l 2>/dev/null | awk 'NR>1 && $1 ~ /^[0-9]+$/ {print $1}')"
[ -n "$_ids" ] || { log_msg "SCAN: no torrents returned by RPC"; exit 0; }
for _id in $_ids; do
_info="$(TR_REMOTE_CMD -t "$_id" -i 2>/dev/null)"
[ -n "$_info" ] || continue
_name="$(echo "$_info" | extract_field "Name")"
_done="$(echo "$_info" | extract_field "Percent Done")"
_location="$(echo "$_info" | extract_field "Location")"
[ -n "$_name" ] || continue
[ -n "$_location" ] || continue
case "$_done" in
100%*) ;;
*) continue ;;
esac
_target="${_location}/${_name}"
move_if_video "$_id" "$_target" "$_name"
done
exit 0
}
# Проверка наличия transmission-remote (обязателен для --move). В ujail может быть пустой PATH — смотрим /usr/bin.
if ! command -v transmission-remote >/dev/null 2>&1 && [ ! -x /usr/bin/transmission-remote ]; then
log_msg "ERROR: transmission-remote not found. Install: apk add transmission-remote. Skipping."
exit 0
fi
if [ ! -d "$DEST_VIDEO" ]; then
log_msg "ERROR: DEST_VIDEO is not a directory: $DEST_VIDEO"
exit 0
fi
# Если скрипт запущен не как script-torrent-done (нет TR_*), работаем как периодический сканер.
if [ -z "$TR_TORRENT_ID" ] || [ -z "$TR_TORRENT_DIR" ] || [ -z "$TR_TORRENT_NAME" ]; then
#log_msg "SCAN: TR_* not set, running periodic scan mode"
scan_mode
fi
TARGET="${TR_TORRENT_DIR}/${TR_TORRENT_NAME}"
move_if_video "$TR_TORRENT_ID" "$TARGET" "$TR_TORRENT_NAME"
exit 0
3.8.2. transmission-inbox-to-watch.sh (опционально): кидаешь .torrent в incoming по SMB; cron раз в минуту переносит файл в watch (удобно, когда прямой SMB в watch не подходит). Лог по умолчанию тот же файл, что и у done-скрипта. Сохрани в /mnt/data/torrents/transmission-inbox-to-watch.sh:
#!/bin/sh
# Перенос .torrent из «входящей» папки в watch — локально на NAS (не через Samba в watch).
# Идея: кидать торренты в incoming по SMB; cron вызывает скрипт → mv в watch → inotify видит локальную операцию.
#
# Установка (пример):
# mkdir -p /mnt/data/torrents/incoming && chmod 775 /mnt/data/torrents/incoming
# chown transmission:transmission /mnt/data/torrents/incoming
# cp transmission-inbox-to-watch.sh /mnt/data/torrents/transmission-inbox-to-watch.sh && chmod 750 /mnt/data/torrents/transmission-inbox-to-watch.sh
# echo '* * * * * /mnt/data/torrents/transmission-inbox-to-watch.sh' >> /etc/crontabs/root
# /etc/init.d/cron enable && /etc/init.d/cron restart
# Шара Samba только на incoming; в watch класть не нужно — скрипт сам переносит.
#
# Настройки:
DROP_DIR="${DROP_DIR:-/mnt/data/torrents/incoming}"
WATCH_DIR="${WATCH_DIR:-/mnt/data/torrents/watch}"
RUN_AS="${RUN_AS:-transmission}"
# Пауза перед сравнением размера (сек), чтобы не схватить недокачанный по SMB файл
SETTLE_SEC="${SETTLE_SEC:-2}"
# Файл лога (общий с done-скриптом по умолчанию); оставь пустым для отключения записи в файл.
LOG_FILE="${LOG_FILE:-/mnt/data/torrents/transmission-done.log}"
log() {
_ts="$(date '+%Y-%m-%d %H:%M:%S' 2>/dev/null || date)"
_line="$_ts $*"
logger -t transmission-inbox "$_line"
[ -n "$LOG_FILE" ] && echo "$_line" >>"$LOG_FILE" 2>/dev/null
}
[ -d "$DROP_DIR" ] || { log "ERROR: DROP_DIR not a directory: $DROP_DIR"; exit 1; }
[ -d "$WATCH_DIR" ] || { log "ERROR: WATCH_DIR not a directory: $WATCH_DIR"; exit 1; }
for f in "$DROP_DIR"/*.torrent; do
[ -f "$f" ] || continue
base=$(basename "$f")
s1=$(wc -c <"$f" 2>/dev/null) || continue
sleep "$SETTLE_SEC"
s2=$(wc -c <"$f" 2>/dev/null) || continue
[ "$s1" = "$s2" ] || { log "SKIP (still growing?): $base"; continue; }
dest="$WATCH_DIR/$base"
if [ -e "$dest" ]; then
log "SKIP (exists in watch): $base"
rm -f "$f" 2>/dev/null
continue
fi
if mv "$f" "$dest" 2>/dev/null; then
chown "$RUN_AS:$RUN_AS" "$dest" 2>/dev/null
log "MOVED: $base -> $WATCH_DIR"
else
log "ERROR: mv failed: $f -> $dest"
fi
done
exit 0
Пример cron (выполняется от root; подстрой пути):
* * * * * /mnt/data/torrents/transmission-inbox-to-watch.sh */5 * * * * /mnt/data/torrents/transmission-done-move-video.sh
3.9. Пакет transmission-remote, каталог видео и подключение скрипта в Transmission
Пакет transmission-cli не содержит transmission-remote — нужен отдельный пакет:
apk search transmission apk add transmission-remote
Создай каталог назначения внутри download_dir (из-за ujail перенос в /mnt/data/video у меня не сработал — ошибка прав / не переезжало; рабочая цель — /mnt/data/torrents/video):
mkdir -p /mnt/data/torrents/video chown -R transmission:transmission /mnt/data/torrents/video
Создай файлы на NAS по содержимому из п. 3.8 (или скопируй из репозитория scripts/). Оба скрипта должны лежать внутри /mnt/data/torrents/ — иначе демон из песочницы не выполнит done-скрипт. Права:
chmod 750 /mnt/data/torrents/transmission-done-move-video.sh /mnt/data/torrents/transmission-inbox-to-watch.sh chown transmission:transmission /mnt/data/torrents/transmission-done-move-video.sh /mnt/data/torrents/transmission-inbox-to-watch.sh
В OpenWrt опция пути к done-скрипту — script_torrent_done_filename:
uci set transmission.@transmission[0].script_torrent_done_filename='/mnt/data/torrents/transmission-done-move-video.sh' uci set transmission.@transmission[0].script_torrent_done_enabled='1' uci delete transmission.@transmission[0].script_torrent_done 2>/dev/null uci commit transmission /etc/init.d/transmission restart grep -E 'script-torrent-done' /tmp/transmission/settings.json
При rpc_authentication_required='1' скрипт сам подставляет логин/пароль из UCI (если не заданы RPC_USER / RPC_PASS в начале файла). При отключённой аутентификации RPC ничего дополнительно задавать не нужно. Ручная проверка переноса (подставь свой ID торрента вместо 1; при включённом RPC добавь -n user:pass):
transmission-remote -t 1 --stop transmission-remote -t 1 --move /mnt/data/torrents/video transmission-remote -t 1 --start
У меня перенос сработал, события скрипта — в logread и в /mnt/data/torrents/transmission-done.log (если задан LOG_FILE). Обновить скрипты с ПК: scp …/transmission-done-move-video.sh root@NAS:/mnt/data/torrents/ и то же для transmission-inbox-to-watch.sh, затем chmod 750, chown transmission:transmission, при необходимости sed -i 's/\r$//' ….
4. Контроль ресурсов
date uptime free -m df -h / /overlay /mnt/data cat /proc/swaps
5. Ссылки
- OpenWrt PR #17924 (DNS-325)
- Transmission — Scripts.md (
TR_*для script-torrent-done)
Комментарии
Отправить комментарий