Запуск системної служби як користувач, крім 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 User & Group, 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

Я думаю, ви хочете роздвоювати замість простого. Простий припускає, що ваш процес не виходить, тому коли він це робить, він називає процес мертвим.

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


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