Uruchamianie usługi systemowej jako użytkownik inny niż root!


18

Utworzyłem następującą usługę amos.service i musi ona działać jako amos (członek grupy 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

wszystkie uprawnienia zostały ustawione na /usr/share/amosceluamos:amos

Plik amos_service.sh wygląda następująco:

#!/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"

Kiedy uruchamiam usługę początkowo bez żadnych modyfikacji katalogów, co oznacza, że ​​należy do roota i amos.service nie ma parametru User not Group, wszystko działa świetnie!

Po zmianie uprawnień katalogów na amos: amos i dodaniu użytkownika i grupy amos.service serive nie będzie działać i otrzymam następujące informacje: Zobacz załączony obraz

Błąd po próbie uruchomienia usługi


Jaka jest różnica, jeśli w ogóle, pomiędzy przypadkami powodzenia i niepowodzenia pod względem komunikatów zalogowanych do /var/log/amos.log?
sourcejedi

Również ta konfiguracja jest dziwna, ponieważ /var/logjest własnością root. Myślę, że chcesz użyć katalogu, /var/log/amos/który tworzysz jako własność amos.
sourcejedi

Odpowiedzi:


11

Użyj systemd:

Aby wyświetlić problem, użyj go journalctl -xepo uruchomieniu usługi.

Nie potrzebujesz skryptu bash, umieść to w pliku usługi:

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

Nie ma takiej potrzeby ExecStop, systemd zatrzyma wszystkie procesy potomne. Możesz wyświetlić dane wyjściowe za pomocą journalctl -u amos.service.


4
Po ExecStart powinno być „=”. Nie mogę tego naprawić, ponieważ edycja miałaby mniej niż 6 znaków.
Mark Stosberg

5

Myślę, że chcesz rozwidlać zamiast prostego. Simple zakłada, że ​​proces się nie kończy, więc kiedy to nastąpi, wywołuje proces martwy.

Prawdopodobnie chcesz usunąć skrypt amos_service.sh i umieścić jego funkcjonalność w pliku amos.service.


Dokonam zmian zgodnie z sugestią ... czytałem o tym i widziałem Twój komentarz. Rejestruje wyniki.
itprguy
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.