VLC не может разрешить DNS потока, когда запущен как служба systemd.

Вопрос или проблема

Я пытаюсь запустить простой перенаправитель потока с помощью VLC как 24/7 сервис на Debian 12 VM. Я вижу следующую ошибку в выводе журнала.

Jan 28 20:15:10 iptv-vlc vlc[14523]: [hexid] main tls client debug: using tls client module "gnutls"
Jan 28 20:15:10 iptv-vlc vlc[14523]: [hexid] main tls client debug: resolving www.example.com ...
Jan 28 20:15:10 iptv-vlc vlc[14523]: [hexid] main tls client error: cannot resolve www.example.com port 443: System error
Jan 28 20:15:10 iptv-vlc vlc[14523]: [hexid] access stream error: HTTP connection failure

Я, очевидно, очистил это. Никаких проблем с подключением к серверу нет. При интерактивном запуске команда работает. Далее следует файл юнита.

[Unit]
Description=VLC streamer
After=multi-user.target

[Service]
User=vlcuser
Group=vlcuser
Type=simple
Restart=always
RestartSec=10
ExecStart=/usr/bin/vlc -vv https://www.example.com/listen --sout '#rtp{dst=239.0.6.9,port=12345,mux=ts,ttl=16}'

[Install]
WantedBy=default.target

Я пытался использовать различные цели и вариации опций Restart и Type. Я также попытался вложить команду в сценарий и запускать его вместо команды, но результат всегда один и тот же; VLC говорит, что не может разрешить домен и завершает работу, переводя сервис в неработоспособное состояние.

Почему DNS, кажется, отказывает только тогда, когда VLC запускается как служба systemd?

.

Ответ или решение

Проблема, с которой вы столкнулись при запуске VLC в качестве службы systemd на Debian 12, связана с неудачей в разрешении DNS. Сама по себе ошибка указывает на невозможность разрешения доменного имени, что вызывает сбой HTTP-соединения.

Теория:

В Linux, когда служба запускается через systemd, она может иметь рабочие условия, отличающиеся от тех, которые есть при интерактивном запуске. В случае вашего VLC, который работает как фоновая служба, это означает, что параметры окружения и права доступа, которые установлены для этой службы по умолчанию, могут отличаться от тех, что действуют в интерактивной пользовательской сессии.

DNS-разрешение для службы может зависеть от:

  1. Конфигурации сети и сетевых интерфейсов на момент запуска службы. Убедитесь, что служба запускается после установления сетевого соединения.
  2. Разрешений пользователя. Для службы может не иметься достаточно прав для выполнения сетевых операций.
  3. Наличия соответствующих модулей и библиотек, которые могут потребоваться для осуществления DNS-запросов.
  4. Конфигурационного файла /etc/resolv.conf, который используется для DNS-запросов. Если у службы нет доступа или файл неправильно сконфигурирован, это может выражаться в ошибках DNS.

Пример:

Рассмотрим сферические примеры, как отреагировали другие системы на подобные проблемы. В ряде случаев замена стандартного модуля TLS, таких как GnuTLS, на другой, решала проблему, так как оригинальные модули могли быть ошибочно собраны или зависеть от специфичных библиотек. Также важно учитывать, что некоторые среды не соответствуют нуждам DNS из-за сетевой среды самой виртуальной машины.

Применение:

  1. Проверьте сетевые зависимости: Обновите секцию [Unit] в вашем unit-файле, чтобы служба запускалась после установления сетевого соединения:

    [Unit]
    Description=VLC streamer
    After=network-online.target
    Wants=network-online.target

    Это поможет вам гарантировать, что VLC не пытается установит соединение до того, как сеть будет полностью доступна.

  2. Проверьте права пользователя: Убедитесь, что пользователь vlcuser, под которым запускается служба, имеет все необходимые права. Это можно сделать с помощью команды:

    sudo usermod -aG netdev vlcuser

    Это добавит пользователя в группу netdev, которая имеет права на выполнение сетевых операций.

  3. Измените конфигурацию разрешения DNS: Проверьте, имеется ли доступ у службы VLC к /etc/resolv.conf. Убедитесь, что этот файл правильно настроен и доступен пользователю VLC. Вы также можете попробовать временно установить другой DNS-сервер, например, Google DNS (8.8.8.8).

  4. Включите дополнительные отладки DNS: Вы можете добавить дополнительные конфигурации для повышения уровня отладки VLC, чтобы более подробно рассмотреть ошибку. Для этого измените строку запуска в вашем unit-файле:

    ExecStart=/usr/bin/vlc -vv --advanced --file-logging --logfile=/var/log/vlc.log https://www.example.com/listen --sout '#rtp{dst=239.0.6.9,port=12345,mux=ts,ttl=16}'

    Это позволит вам собрать дополнительные логи, которые могут указать на причину сбоя.

  5. Локальный DNS кэш и его перестройка: Попробуйте использовать утилиты, типа resolvconf, чтобы обновить кэш DNS на системе.

  6. Проверка контейнеризации: Убедитесь, что ваша среда виртуализации или имитации не вмешивается в системные задания служб и их сетевые активности.

Проделав все эти шаги, вы можете обнаружить реальную причину проблемы и устранить сложности с разрешением DNS в вашей setup systemd. Таким образом, стабильное и успешное функционирование службы VLC будет обеспечено.

Оцените материал
Добавить комментарий

Капча загружается...