LINUX.ORG.RU

сервис systemd не хочет стартовать

 ,


0

1

subj

$ systemctl --user status mpdas.service -l
● mpdas.service - AudioScrobbler client for MPD
   Loaded: loaded (/usr/lib/systemd/user/mpdas.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Thu 2015-12-31 18:48:55 MSK; 2min 33s ago
 Main PID: 1277 (code=exited, status=1/FAILURE)

Dec 31 18:48:55 navi systemd[1270]: Started AudioScrobbler client for MPD.
Dec 31 18:48:55 navi mpdas[1277]: (18:48:55) [ERROR] Could not connect to MPD.
Dec 31 18:48:55 navi systemd[1270]: mpdas.service: Main process exited, code=exited, status=1/FAILURE
Dec 31 18:48:55 navi systemd[1270]: mpdas.service: Unit entered failed state.
Dec 31 18:48:55 navi systemd[1270]: mpdas.service: Failed with result 'exit-code'.
$ cat /usr/lib/systemd/user/mpdas.service 
[Unit]
Description=AudioScrobbler client for MPD
After=mpd.service
Requires=mpd.service

[Service]
ExecStart=/usr/bin/mpdas

[Install]
WantedBy=default.target
$ cat /usr/lib/systemd/user/mpd.service 
[Unit]
Description=Music Player Daemon
After=network.target sound.target

[Service]
ExecStart=/usr/bin/mpd --no-daemon

# allow MPD to use real-time priority 50
LimitRTPRIO=50
LimitRTTIME=infinity

[Install]
WantedBy=default.target

при этом после рестарта он(mpdas.service) запускается на ура

★★★★

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

Вообще это плохая идея — стартовать с Type=simple программы, от которых есть какие-то зависимости. Этот наш mpd нотификацию старта (Type=notify) не умеет?

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

похоже, что не умеет(я ведь правильно понимаю, что если бы он умел, он бы зависел от systemd?). и, собсна, что тогда делать?

upd: есть, вроде бы, такой вариант, как использовать system/mpd.service и system/mpd.socket, но он рассчитан на то, что mpd будет пускаться как системный юнит, что по-моему есть какой-то костыльный метод

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

Пользовательский systemd тоже умеет в сокет-активацию. Скопируй эту пару юнитов в /etc/systemd/user и поправь путь до сокета (я не знаю, каким он должен быть, чтобы mpdas его увидел). Если сделать так, то в mpdas.service вообще никаких зависимостей не нужно.

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

вроде понятно, но тогда ещё вопрос. путь до сокета задаётся в конфиге mpd. как наименее больно сделать так, чтобы в mpd.socket указывать именно его? а то systemd.socket(5) я ничего по этому поводу полезного не увидел

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

Ты спрашиваешь про автогенерацию? Никак. Только руками удостовериться, что совпадают.

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

mpd умеет в сокет, но не умеет в dbus (что дико бесит).

ТС, бери юнит-файл из апстрима генты или арча, суй к себе в хомяк и пинай его оттуда.

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

да, я уже так и делаю, но то, что в mpd.socket нужно ручками прописывать адрес сокета, ваще не радует

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

Так ты mpd.socket тоже возьми оттуда же, откуда берёшь mpd.service.

В генте поставляются оба файла искаропки, и системно запускается без проблем.

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

Я тут читнул ман на mpd. При использовании сокет-активации, mpd игнорирует путь к сокету в конфиге. Т. е., по сути, юнит становится твоим конфигом, и это типа by design (Леннарт вон постоянно говорит «не бойтесь править юниты, они специально сделаны простыми»).

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

Если тебе это всё равно не нравится, пиши шеллскрипт-генератор, который бы создавал юнит по конфигу. Но это для DRY-маньяков.

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

дык я и взял, и использую. не нравилось же мне то, что надо руками «синхронизировать» адрес сокета в mpd.conf и mpd.socket, но по этому поводу уже подсказал intelfx

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

только тут ещё один вопрос. mpd умеет слушать на всех доступных сетевых интерфейсах. можно ли в сокете systemd прописать примерно то же самое, не используя доп. средства типа генератора *.socket-файла?

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

не нравилось же мне то, что надо руками «синхронизировать» адрес сокета в mpd.conf и mpd.socket

Странно, я думал, ты в теме, что сокет systemd приоритетнее кинфижного. Кстати, от юзера могут быть проблемы с сокетами, но, думаю, ты разберёшься.

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

Странно, я думал, ты в теме, что сокет systemd приоритетнее кинфижного.

ни разу не стартовал mpd system-wide, да ещё и via systemd и не думал, что это может пригодиться. потому и не особо уделил внимание этому, когда ещё осиливал mpd

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

можно ли в сокете systemd прописать примерно то же самое

Да, конечно.

[Socket]
# TCP
ListenStream=<port>
# UDP
ListenDatagram=<port>
intelfx ★★★★★
()
Ответ на: комментарий от f1u77y

ни разу не стартовал mpd system-wide, да ещё и via systemd и не думал, что это может пригодиться. потому и не особо уделил внимание этому, когда ещё осиливал mpd

А я предпочитаю слушать музыку ещё до начала сессии, ибо я могу залогиниться не под пользователем, а под рутом, и не в иксы, а в tty, но при этом не хочу заморачиваться с настройкой переключения треков и прочим — всё рулится само по себе уже давно подготовленными костылями, и жрать не просит. А если вернуть acpid, то можно хоткеи на медиакнопки нацепить, и не париться на локерах или логин-скринах.

r3lgar ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.