Запуск службы systemd от имени пользователя, отличного от пользователя root!


18

Я создал следующий сервис, amos.service, и он должен работать как amos (член группы amos)

[Unit]
Description=AMOS Service
After=network.target

[Service]
User=amos
Group=amos
Type=simple
WorkingDirectory=/usr/share/amos
ExecStart=/usr/share/amos/amos_service.sh start
ExecStop=/usr/share/amos/amos_service.sh stop
Restart=on-failure

[Install]
WantedBy=multi-user.target

все разрешения установлены на /usr/share/amosкamos:amos

amos_service.sh выглядит следующим образом:

#!/bin/bash

CUDIR=$(dirname "$0")
cd /usr/share/amos

start() {
  exec /usr/share/amos/run_amos.sh >> /var/log/amos.log 2>&1  
}

stop() {
  exec pkill java 
}

case $1 in
  start|stop) "$1" ;;
esac

cd "$CURDIR"

Когда я запускаю сервис изначально без каких-либо изменений в каталогах, то есть, принадлежащих root, и amos.service без параметра User not Group, все работает отлично!

После того, как я изменил разрешения каталогов на amos: amos и добавил пользователя и группу amos.service, Serive не будет работать, и я получаю следующее: См. Прикрепленное изображение

Ошибка после попытки запуска службы


В чем разница, если таковая имеется, между случаями успеха и неудачи с точки зрения сообщений, зарегистрированных в /var/log/amos.log?
sourcejedi

Кроме того, эта конфигурация является странной в том, что /var/logпринадлежит root. Я думаю, что вы хотите использовать каталог, /var/log/amos/который вы создаете как принадлежащий amos.
sourcejedi

Я создам, как упоминалось, и
itprguy

Ответы:


11

Используйте systemd:

Чтобы показать проблему, используйте journalctl -xeпосле запуска службы.

Вам не нужен bash-скрипт, поместите его в служебный файл:

ExecStart=/usr/share/amos/run_amos.sh

В этом нет необходимости ExecStop, systemd остановит все дочерние процессы. Вы можете просмотреть вывод с помощью journalctl -u amos.service.


4
После ExecStart должно быть "=". Я не могу это исправить, потому что редактирование будет менее 6 символов.
Марк Стосберг

5

Я думаю, что вы хотите разветвления вместо простого. Simple предполагает, что ваш процесс не завершается, поэтому, когда это происходит, он вызывает процесс как мертвый.

Вы, вероятно, хотите удалить скрипт amos_service.sh и поместить его функциональность в amos.service.


Внесу изменения, как предложено ... читал об этом и видел ваш комментарий. Буду возвращать результаты.
itprguy
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.