Автор Тема: Создание и запуск пользовательской службы systemd [решено]  (Прочитано 2197 раз)

Оффлайн MrFlibble

  • Завсегдатай
  • *
  • Сообщений: 57
Здравствуйте.

У меня не получается создать и запустить пользовательскую службу для автозагрузки TiMidity++ в режиме сервера в ALT Linux KDesktop 7.0.5. Следуя инструкциям отсюда, я создал файл timidity.service и поместил его в ~/.config/systemd/user/ и в /etc/systemd/user/timidity.service, скопировав предложенное на странице содержимое, но когда я набираю команду systemctl --user enable timidity.service, получаю следующее сообщение:
Failed to issue method call: Process /bin/false exited with status 1При попытке запуска с правами администратора сообщение другое:
Failed to get D-Bus connection: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.Системный монитор показывает, что systemd загружен и работает. Подскажите, пожалуйста, что я делаю не так. Возможно, есть другой способ решения этой задачи, без использования systemd?

[Добавлено] Мне удалось сделать автозагрузку методом, описанным тут, но в результате при запуске системы перестал работать любой другой звук, кроме TiMidity++, так что пришлось откатить.
« Последнее редактирование: 24.08.2017 20:14:43 от Skull »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Возможно, есть другой способ решения этой задачи, без использования systemd?

Есть:

Запуск UNIX System V init сервисов в системах с systemd:
Например
$ cat /etc/rc.d/init.d/nm-group
#!/bin/bash
#
# Adding the first user to the _nmconnect group
#

# chkconfig: 2345 10 92
# description:  Adding the first user to the _nmconnect group
#
### BEGIN INIT INFO
# Provides:       nm-group
# Required-Start:
# Required-Stop:
# Default-Start:  2 3 4 5
# Default-Stop:
# Description:    Adding the first user to the _nmconnect group
### END INIT INFO


# Source function library.
. /etc/rc.d/init.d/functions

start() {
# adding first user to a group _nmconnect

getent group _nmconnect>/dev/null 2>&1 || groupadd -r _nmconnect>/dev/null 2>&1
for n in `awk -F: '{if ($3==500) print $1}' /etc/passwd`
    do
id -Gn $n|grep -c _nmconnect>/dev/null 2>&1 || gpasswd -a $n _nmconnect>/dev/null 2>&1
done

chkconfig nm-group off
}

case "$1" in
    start)
    start
    ;;
    *)
        echo $"Usage: $0 {start}"
        exit 1
esac
exit 0

Хидер ### BEGIN INIT INFO позволит запустить sysv сервис и в системах с systemd.

Принцип создания sysvinit сервиса подробно рассмотрен здесь:
https://forum.altlinux.org/index.php?topic=32361.msg253079#msg253079

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
но в результате при запуске системы перестал работать любой другой звук, кроме TiMidity++,

Гугл спросите:
timidity pulseaudio solved

Оффлайн Антон Мидюков

  • alt linux team
  • ***
  • Сообщений: 5 183
  • antohami@
Зачем TiMidity++ запускать от пользователя? В состав пакета уже входит init-скрипт запуска службы /etc/rc.d/init.d/timidyty

Проверить статус службы:
systemctl status timidity

Включить службу в автозапуск:
systemctl enable timidity

Включить службу:
systemctl start timidity

Оффлайн Антон Мидюков

  • alt linux team
  • ***
  • Сообщений: 5 183
  • antohami@
Вроде как в systemd 201 опции --user ещё не было. Потому на p7 и не работает. Чтобы запускать на p7 для пользователя можете команду
/usr/bin/timidity -iA -Os

Добавить в .bash_profile

Либо добавить ~/.config/autostart/timidity.desktop с таким содержанием:
[Desktop Entry]
Version=1.0
Type=Application
Name=TiMidity++
Exec=/usr/bin/timidity -iA -Os
Terminal=false


Оффлайн MrFlibble

  • Завсегдатай
  • *
  • Сообщений: 57
Включить службу в автозапуск:
systemctl enable timidity

Включить службу:
systemctl start timidity
При попытке запуска от имени пользователя получаю отказ в доступе, а если от администратора, то сообщения об ошибке:
# systemctl enable timidity
Failed to issue method call: No such file or directory
# systemctl start timidity
Job for timidity.service failed. See 'systemctl status timidity.service' and 'journalctl -xn' for details.
Запрос systemctl status timidity.service выдаёт вот такой лог:
Starting SYSV: MIDI softsynth service...
Starting timidity service: [ DONE ]
PID 4692 read from file /var/run/timidity.pid does not exist.
Failed to start SYSV: MIDI softsynth service.
Unit timidity.service entered failed state
Как я понял, система жалуется на неправильный/отсутствующий ID процесса.

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 920
    • Домашняя страница
    • Email
Нет, это всего лишь предупреждение. Надо запускать сам демон а режиме отладки. Скорее всего, под пользователем проблема с правами доступа к устройству.
Андрей Черепанов (cas@)

Оффлайн MrFlibble

  • Завсегдатай
  • *
  • Сообщений: 57
Мне удалось решить проблему с помощью timidity.desktop, как описано выше, спасибо!