qBittorrent не работает после отключения питания. РЕШЕНО

Столкнулся с такой проблемой, решения в интернете не нашел. В чате нашел такую же проблему, но человеку так и не ответили. Нашел свое решение (храни вас ИИ), делюсь:

  1. Ищем остался ли lock файл после выдёргивания питания:
    find /etc/qbittorrent -maxdepth 3
    Тут он есть:

/etc/qbittorrent/qBittorrent/config:

drwxr-xr-x 3 root root 680 Aug 13 11:22 .
drwxr-xr-x 5 root root 352 Aug 13 10:20 ..
-rw-r–r-- 1 root root 4 Aug 13 10:20 categories.json
srwx------ 1 root root 0 Aug 13 11:22 ipc-socket
-rw-r–r-- 1 root root 101 Aug 13 11:22 lockfile

В чем была проблема:

Это классический lock-файл (файл блокировки). Когда qBittorrent запускается, он создает этот файл, чтобы защитить профиль от одновременного запуска двух копий.

Когда ты выдернул шнур питания, роутер выключился мгновенно, и программа просто физически не успела стереть этот файл при завершении работы. При следующем включении служба qBittorrent пытается стартовать, видит этот lockfile и думает: “Внимание! Копия программы уже заведена и работает!”, после чего падает с ошибкой. procd пытается её перезапустить — получается тот самый crash loop.

А когда ты запускал его вручную (qbittorrent-nox), он создавал конфиг в другом месте, где этого файла не было, поэтому он и открывался.

Лечение:

  1. Проверка что в этом проблема:
    /etc/init.d/qbittorrent stop
    rm -f /etc/qbittorrent/qBittorrent/config/lockfile
    /etc/init.d/qbittorrent start

  2. Если в этом - автоматизируем удаление
    автоматическая очистка при старте службы — это самое изящное и правильное решение для роутера. В среде embedded-систем (как OpenWrt) это стандартная практика: скрипт инициализации должен сам готовить себе “чистое” окружение (pre-flight check) перед запуском программы. Это делает систему “пуленепробиваемой” к выдергиванию шнура.

Мы просто добавим команду удаления этого файла в начало функции start_service() в скрипте /etc/init.d/qbittorrent.

Как это сделать одной командой:

Эта команда найдет строку начала функции start_service() и вставит туда команду удаления lockfile. Выполни это в терминале:

Bash

sed -i '/start_service() {/a \\trm -f /etc/qbittorrent/qBittorrent/config/lockfile' /etc/init.d/qbittorrent

*(Что делает эта команда: она ищет функцию start_service и вставляет сразу после нее команду удаления файла блокировки с нужным отступом).

Проверим, что получилось:

Давай взглянем на измененный скрипт:

Bash

cat /etc/init.d/qbittorrent

Ты должен увидеть что-то вроде этого в начале функции start_service:

Bash

start_service() {
    rm -f /etc/qbittorrent/qBittorrent/config/lockfile
    config_load qbittorrent
    ...

ИТОГ:

  1. Обычный ребут через команду - всё ОК
  2. Выдёргивание питания на 5минут - всё ОК