LINUX.ORG.RU

MPD мусорит в логах, но работает

 ,


0

1

Настроил mpd, работает отлично. Но! В логах по несколько раз в день появляются следующие строки:

Jun 20 06:23:13 dozer systemd[113368]: mpd.socket: Failed to create listening socket (0.0.0.0:6600): Address already in use
Jun 20 06:23:13 dozer systemd[113368]: mpd.socket: Failed to listen on sockets: Address already in use
Jun 20 06:23:13 dozer systemd[113368]: mpd.socket: Failed with result 'resources'.
Jun 20 06:23:13 dozer systemd[113368]: Failed to listen on mpd.socket.
Jun 20 06:23:16 dozer mpd[113383]: exception: Failed to bind to '192.168.77.1:6600'
Jun 20 06:23:16 dozer mpd[113383]: exception: nested: Failed to bind socket: Address already in use
Jun 20 06:23:17 dozer systemd[113368]: mpd.service: Main process exited, code=exited, status=1/FAILURE
Jun 20 06:23:17 dozer systemd[113368]: mpd.service: Failed with result 'exit-code'.
Jun 20 06:23:17 dozer systemd[113368]: Failed to start Music Player Daemon.

Что происходит понять не могу. Кто пытается запускать (повторно) тоже не нашёл. Порт естессно занят, им же и занят. Вот и ругается.

В конфиге:
bind_to_address «192.168.77.1»
bind_to_address «127.0.0.1»
port «6600»
audio_output {
type «httpd»
name «DOZER HTTP Music Streamer (flac)»
encoder «flac» # flac, vorbis, lame
port «7700»
bind_to_address «192.168.77.1» # optional, IPv4 or IPv6
quality «1.0» # do not define if bitrate is defined
# bitrate «256» # do not define if quality is defined
format «44100:16:1»
max_clients «10» # optional 0=no limit
always_on «yes»
}

Подскажите направление, может кто сталкивался.

★★

Ответ на: комментарий от skyman

Первый раз это глобально и порт 6600, а второй раз это блок OUTPUT и там порт 7700. Так что тут конфликта точно нет. Я MPD поднял на сервере и подключаюсь к нему по сети консольным клиентом

Vint ★★ ()

Похоже у тебя конфликт systemd-socket-activation (или как оно там правильно зовётся). systemd заняло порт (для musicpd), musicpd не может его юзать, или наоборот.

mord0d ★★★★★ ()
Ответ на: комментарий от Vint

так что нужно его просто systemctl disable mpd.socket?

Я уже не помню, я очень давно запускал musicpd на Linux с systemd.

Добавь тег systemd, так у тебя будет больше шансов решить проблему.

mord0d ★★★★★ ()
Ответ на: комментарий от mord0d

Тег добавил.

Ещё странным показалось что в /etc/systemd/ два файла(линка) сервиса. Один из /etc/systemd/user ссылается на /usr/lib/systemd/mpd.service, а второй из /etc/systemd/system на /lib/systemd/system соответственно. Файлы отличаются, в том что в user нет строки Also=mpd.socket. Чёт я запутался, нахрена два сервиса?

Vint ★★ ()
Ответ на: комментарий от intelfx

а что тут непонятного, mpd работает, но systemd постоянно пытается его запустить (по всей видимости повторно). Строки из логов содержащие ошибки я привёл. Всё описано в первом посте. По мне так всё ясно относительно проблемы. А вот из-за чего это происходит я понять не могу. MPD ставил на чистую, в первый раз. Конфиг практически дефолтовый. В системе запуска ничего не менялось, всё как дебиан предоставляет.

Что, неужели ни у кого такого не было?

Vint ★★ ()
Ответ на: комментарий от Vint

а что тут непонятного

Ну если ничего непонятного, то чего тогда тему создавал? :)

mpd работает, но systemd постоянно пытается его запустить (по всей видимости повторно)

Повторно systemd ничего запускать не может, на то он и супервизор.

Посмотрел ещё раз на твой лог. У тебя, похоже, mpd запускается в двух разных systemd: системном и пользовательском. И это, как обычно, косяк дебиана. Сейчас поясню.

intelfx ★★★★★ ()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от Vint

Поставил mpd в чистом Debian Buster (testing что-то не бутстрапнулся, но это как оказалось и не нужно).

Чтобы воспроизвести проблему, предварительно пришлось установить libpam-systemd, потому что по умолчанию этот пакет не устанавливается и пользовательские сессии не регистрируются в logind. Я уже говорил, насколько я люблю Debian-овец, которые сами себе расширяют матрицу тестирования до неприличных размеров, а потом совершенно ожидаемо лажают?

# apt install mpd
<...>
Setting up mpd (0.21.5-3) ...
dpkg-statoverride: warning: deprecated --force option; use --force-all instead
dpkg-statoverride: warning: deprecated --force option; use --force-all instead
dpkg-statoverride: warning: deprecated --force option; use --force-all instead
dpkg-statoverride: warning: deprecated --force option; use --force-all instead
Created symlink /etc/systemd/user/default.target.wants/mpd.service → /usr/lib/systemd/user/mpd.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mpd.service → /lib/systemd/system/mpd.service.
Created symlink /etc/systemd/system/sockets.target.wants/mpd.socket → /lib/systemd/system/mpd.socket.
Job for mpd.socket failed.
See "systemctl status mpd.socket" and "journalctl -xe" for details.
Processing triggers for systemd (241-7~deb10u4) ...
Processing triggers for libc-bin (2.28-10) ...

Фейл выше — это «норма», сервис запустился раньше сокета и занял порт. Видишь, как Debian автоматически включил и системный юнит, и пользовательский?

Теперь мы заходим под пользователем и второй экземпляр systemd (наш, личный, пользовательский) пытается — правильно, запустить второй экземпляр mpd:

Debian GNU/Linux 10 debian-buster console

debian-buster login: user
Last login: Tue Jun 23 17:35:56 MSK 2020 on pts/0
Linux debian-buster 5.7.4-arch1-1 #1 SMP PREEMPT Sat, 20 Jun 2020 08:35:17 +0000 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
$ export TERM=screen
$ systemctl --user --failed
  UNIT        LOAD   ACTIVE SUB    DESCRIPTION
● mpd.service loaded failed failed Music Player Daemon

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

1 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
$ systemctl status mpd
● mpd.service - Music Player Daemon
   Loaded: loaded (/lib/systemd/system/mpd.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-06-23 17:38:34 MSK; 15s ago
     Docs: man:mpd(1)
           man:mpd.conf(5)
           file:///usr/share/doc/mpd/user-manual.html
 Main PID: 51 (mpd)
    Tasks: 3 (limit: 18870)
   Memory: 7.8M
      CPU: 125ms
   CGroup: /system.slice/mpd.service
           └─51 /usr/bin/mpd --no-daemon

Jun 23 17:38:34 debian-buster systemd[1]: Starting Music Player Daemon...
Jun 23 17:38:34 debian-buster mpd[51]: Warning: using insecure memory!
Jun 23 17:38:34 debian-buster systemd[1]: Started Music Player Daemon.
$ systemctl --user status mpd
● mpd.service - Music Player Daemon
   Loaded: loaded (/usr/lib/systemd/user/mpd.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Tue 2020-06-23 17:38:39 MSK; 15s ago
     Docs: man:mpd(1)
           man:mpd.conf(5)
           file:///usr/share/doc/mpd/user-manual.html
  Process: 66 ExecStart=/usr/bin/mpd --no-daemon (code=exited, status=1/FAILURE)
 Main PID: 66 (code=exited, status=1/FAILURE)
      CPU: 120ms

Jun 23 17:38:38 debian-buster systemd[61]: Starting Music Player Daemon...
Jun 23 17:38:39 debian-buster mpd[66]: Warning: using insecure memory!
Jun 23 17:38:39 debian-buster mpd[66]: exception: Failed to open '/etc/mpd.conf': Permission denied
Jun 23 17:38:39 debian-buster systemd[61]: mpd.service: Main process exited, code=exited, status=1/FAILURE
Jun 23 17:38:39 debian-buster systemd[61]: mpd.service: Failed with result 'exit-code'.
Jun 23 17:38:39 debian-buster systemd[61]: Failed to start Music Player Daemon.
Jun 23 17:38:39 debian-buster systemd[61]: mpd.service: Consumed 120ms CPU time.

В моём случае это не срабатывает, потому что на конфиге mpd по умолчанию права 0640 и владелец root:audio. В твоём случае, наверное, права другие или пользователь состоит в группе audio, и запуск проходит дальше. Но общая суть проблемы, надеюсь, ясна.

TL;DR: systemctl --global disable mpd.

intelfx ★★★★★ ()
Ответ на: комментарий от intelfx

Ну вот, у меня были те же подозрения. Я ж и писал что юнита в системде два, один глобальный второй пользовательский. Подспудно понимал, что это не правильно. Подтвердилось. И да у меня и mpd и пользователь в группе audio. Спасиб. Буду разбирать в этом направлении.

Vint ★★ ()
Последнее исправление: Vint (всего исправлений: 2)
Ответ на: комментарий от Vint

Я ж и писал что юнита в системде два, один глобальный второй пользовательский. Подспудно понимал, что это не правильно. Подтвердилось.

То, что их в принципе два, это нормально. Ненормально то, что Debian при установке пакета включает сразу оба.

Буду разбирать в этом направлении

Я же написал тебе решение. Просто выключи пользовательский юнит.

intelfx ★★★★★ ()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

То, что их в принципе два, это нормально. Ненормально то, что Debian при установке пакета включает сразу оба.

Именно это и имелось ввиду

Я же написал тебе решение. Просто выключи пользовательский юнит.

Уже.
Готовое решение - это хорошо, но хочется же до конца понять, чтоб впредь таких вопросов не возникало. Потому и говорю, что буду глубжее изучать работу системды.

Vint ★★ ()
Ограничение на отправку комментариев: только для зарегистрированных пользователей