@korobey

Почему не получается запустить процесс через systemd при том, что запуск вручную работает?

Добрый день!
Ices2, являющийся клиентом для icecast2, запускается вручную в терминале командой
bigboss@bigboss-server:~$ /usr/bin/ices2 /etc/ices2/ices-alsa.xml

При этом всё работает, и в лог-файле ices.log я вижу следующий вывод:
[2019-08-26  13:34:20] INFO ices-core/main IceS 2.0.2 started...
[2019-08-26  13:34:20] INFO input-alsa/alsa_open_module Opened audio device pulse
[2019-08-26  13:34:20] INFO input-alsa/alsa_open_module using 2 channel(s), 44100 Hz, buffer 500 ms 
[2019-08-26  13:34:20] INFO input-alsa/alsa_open_module Starting metadata update thread
[2019-08-26  13:34:20] INFO signals/signal_usr1_handler Metadata update requested
[2019-08-26  13:34:20] INFO audio/downmix_initialise Enabling stereo->mono downmixing
[2019-08-26  13:34:20] INFO audio/resample_initialise Initialised resampler for 1 channels, from 44100 Hz to 22050 Hz
[2019-08-26  13:34:20] INFO encode/encode_initialise Encoder initialising in VBR mode: 1 channel(s), 22050 Hz, quality 
[2019-08-26  13:34:20] WARN metadata/metadata_thread_signal Failed to open file "test" for metadata update: No such file or directory
[2019-08-26  13:34:20] INFO stream/ices_instance_stream Connected to server: localhost:8000/kupina


Однако созданный мною юнит, содержащий в себе ту же самую команду,
[Unit]
Description=Ices Service
After=network.target
Requires=icecast2.service

[Service]
Type=simple
ExecStart=/usr/bin/ices2 /etc/ices2/ices-alsa.xml
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

безуспешно пытается запустить процесс:
bigboss@bigboss-server:~$ systemctl status ices
● ices.service - Ices Service
   Loaded: loaded (/etc/systemd/system/ices.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Mon 2019-08-26 14:14:00 MSK; 4s ago
  Process: 14477 ExecStart=/usr/bin/ices2 /etc/ices2/ices-alsa.xml (code=exited, status=0/SUCCESS)
 Main PID: 14477 (code=exited, status=0/SUCCESS)

авг 26 14:14:00 bigboss-server systemd[1]: Started Ices Service.
авг 26 14:14:00 bigboss-server ices2[14477]: ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: Connection re
lines 1-8/8 (END)

А в лог-файле при этом появляется:
[2019-08-26  14:14:00] INFO ices-core/main IceS 2.0.2 started...
[2019-08-26  14:14:00] EROR input-alsa/alsa_open_module Failed to open audio device pulse: Connection refused
[2019-08-26  14:14:00] EROR input/input_loop Couldn't initialise input module "alsa"
[2019-08-26  14:14:00] INFO ices-core/main Shutdown complete

Как это понять и что нужно сделать, чтобы процесс запускался через systemd?
  • Вопрос задан
  • 393 просмотра
Пригласить эксперта
Ответы на вопрос 2
dimonchik2013
@dimonchik2013
non progredi est regredi
права, очевидно

вроже ж в системд можно от конкретного юзера запустить, попробуй от своего
Ответ написан
@korobey Автор вопроса
Аллилуйя!
Проблема неожиданно решилась изменением параметра device в конфиге ices-alsa.xml со значения pulse на значение plughw:1,0
где 1,0 - обозначение моей внешней звуковой карты Scarlett 2i2 USB:
bigboss@bigboss-server:~$ aplay -l
**** Список PLAYBACK устройств ****
карта 1: USB [Scarlett 2i2 USB], устройство 0: USB Audio [USB Audio]
  Подустройства: 1/1
  Подустройство №0: subdevice #0

При этом необходимо отметить, что стандартное обращение к устройству в виде hw:1,0 приводило к ошибке
INFO ices-core/main IceS 2.0.2 started...
EROR input-alsa/alsa_open_module Sample format not available: Invalid argument
EROR input/input_loop Couldn't initialise input module "alsa"
INFO ices-core/main Shutdown complete


P.S.
Как позже выяснилось, при описанном выше раскладе Ices, запускаясь через systemd от root, имеет монопольный доступ к звуковой карте, не пуская к ней pulseaudio со всеми вытекающими из этого последствиями: например, невозможно осуществить запись с вывода карты посредством программ Audacity или Ocenaudio. В pavucontrol обнаруживается только "фиктивный выход".
Поэтому пришлось вернуться к варианту запуска через службу systemd/user:
$ sudo xed /etc/systemd/user/ices.service

[Unit]
Description=Ices2 Service

[Service]
ExecStart=/usr/bin/ices2 /etc/ices2/ices-alsa.xml
Restart=always
RestartSec=20s

[Install]
WantedBy=default.target

$ sudo systemctl --user --global enable ices
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы