Вопрос или проблема
Я запускал transmission-daemon без проблем в течение нескольких недель после настройки нового VPS, работающего на Ubuntu 24.04.1. В течение последних 24 часов я заметил, что сервис больше не отвечает. Когда я проверил journalctl, он сообщил, что сервис не был запущен из-за таймаута.
× transmission-daemon.service - Демон BitTorrent Transmission
Loaded: загружен (/usr/lib/systemd/system/transmission-daemon.service; включен; предустановка: включена)
Active: неудача (Результат: таймаут) с вс 2024-09-22 23:46:37 MDT; 3мин 51с назад
Process: 2621 ExecStart=/usr/bin/transmission-daemon -f --log-level=error (код: завершен, статус: 0/УСПЕХ)
Main PID: 2621 (код: завершен, статус: 0/УСПЕХ)
CPU: 374мс
22 сен 23:45:07 arrakis.hrethgir.org systemd[1]: Запуск transmission-daemon.service - Демен BitTorrent Transmission...
22 сен 23:46:37 arrakis.hrethgir.org systemd[1]: transmission-daemon.service: операция запуска превысила время ожидания. Завершение.
22 сен 23:46:37 arrakis.hrethgir.org transmission-daemon[2621]: Закрытие сессии transmission... готово.
22 сен 23:46:37 arrakis.hrethgir.org systemd[1]: transmission-daemon.service: Неудача с результатом 'таймаут'.
22 сен 23:46:37 arrakis.hrethgir.org systemd[1]: Не удалось запустить transmission-daemon.service - Демон BitTorrent Transmission.
Вот содержимое /usr/lib/system/system/transmission-daemon.service:
[Unit]
Description=Демон BitTorrent Transmission
Wants=network-online.target
After=network-online.target
[Service]
User=debian-transmission
Type=notify
ExecStart=/usr/bin/transmission-daemon -f --log-level=error
ExecReload=/bin/kill -s HUP $MAINPID
NoNewPrivileges=true
MemoryDenyWriteExecute=true
ProtectSystem=true
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Если я запускаю transmission-daemon из командной строки с теми же параметрами, он работает нормально.
sudo -u debian-transmission /usr/bin/transmission-daemon -f --log-level=error
Я знаю, что конфигурационный файл работает, потому что когда я запускаю демон вручную, я могу подключиться к нему, добавлять и управлять торрентами. Но попытка запустить его через systemd терпит неудачу. Есть идеи?
Я получаю такую же ситуацию на архитектуре RiscV на visionfive2. Предположил, что это что-то специфическое для Riscv, но похоже, что нет.
Я также заметил, что во время таймаута systemd я мог перейти на localhost:9091 и увидеть веб-страницу, а также получить список (пустой) торрентом с помощью transmission-remote.
Я изменил .service файл с ‘Type=notify’ на ‘Type=exec’, и похоже, что он функционирует правильно. (Думаю, отсутствует что-то, что делает sd-notify).
Существует ли флаг компиляции для включения уведомлений для systemd, возможно отсутствующий?
Ответ или решение
Проблема с тайм-аутом, возникающая при запуске transmission-daemon
через systemd, может быть связана с тем, как служба уведомляет systemd о своем состоянии. В вашем случае, если при запуске через командную строку служба работает нормально, это означает, что, скорее всего, проблема кроется в настройках systemd.
Основные шаги для решения проблемы:
-
Изменение типа службы:
Ваша служба настроена на использованиеType=notify
, что подразумевает, что программа должна отправлять уведомления о своем статусе черезsd_notify()
. Однако, еслиtransmission-daemon
не реализует такое уведомление, это может привести к тайм-аутам. Вы можете изменитьType
наType=simple
илиType=exec
, как вы уже сделали, что должно решить проблему:[Service] Type=simple ExecStart=/usr/bin/transmission-daemon -f --log-level=error
-
Проверка конфигурации:
Убедитесь, что ваша конфигурацияtransmission-daemon
корректна и не вызывает задержек при запуске. Вы можете проверить файл конфигурации, находящийся по адресу/etc/transmission-daemon/settings.json
, и удостовериться, что параметры не конфликтуют. -
Логи и отладка:
Просмотрите логи с помощью командыjournalctl -u transmission-daemon.service
, чтобы увидеть дополнительные сообщения об ошибках или предупреждениях, которые могут помочь в диагностике проблемы. -
Права доступа:
Убедитесь, что пользовательdebian-transmission
имеет нужные права на директории загрузки и файлы конфигурации. Если права доступа установлены неправильно, это может вызвать длительную загрузку или тайм-аут. -
Сетевые настройки:
Посколькуtransmission-daemon
использует сетевые порты, убедитесь, что нужные порты открыты и не блокируются брандмауэром (например, UFW или iptables). -
Параметры контроля тайм-аутов:
Если проблема все еще сохраняется, вы можете увеличить значения параметров тайм-аутов в блоке[Service]
, добавив:TimeoutStartSec=300
Это позволит службе больше времени для завершения запуска, прежде чем systemd решит, что произошел тайм-аут.
Заключение
Изменение типа на Type=simple
или использование Type=exec
обычно решает проблему с тайм-аутом. Однако, внимательно проверьте логи и конфигурацию, чтобы убедиться, что других проблем нет. Если вы хотите, чтобы transmission-daemon
работал с Type=notify
, потребуется убедиться, что он поддерживает уведомления, что может зависеть от версии или сборки. Если у вас есть доступ к исходному коду, вы можете посмотреть, включена ли эта функциональность при компиляции.