Ausführen eines systemd-Dienstes als anderer Benutzer als root!

18

Ich habe den folgenden Dienst erstellt, amos.service, und er muss als amos (Mitglied der amos-Gruppe) ausgeführt werden.

[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

alle Berechtigungen gesetzt wurden auf /usr/share/amoszuamos:amos

Die Datei amos_service.sh lautet wie folgt:

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

Wenn ich den Dienst anfänglich ohne Änderungen an den Verzeichnissen ausführe, was bedeutet, dass er zu root gehört und amos.service nicht den Parameter User not Group hat, läuft alles hervorragend!

Sobald ich die Verzeichnisberechtigungen auf amos: amos ändere und den Benutzer & die Gruppe amos.service hinzufüge, funktioniert der Dienst nicht mehr und ich erhalte Folgendes: Siehe angefügtes Bild

Fehler nach dem Versuch, den Dienst auszuführen

itprguy
quelle
Was ist der Unterschied zwischen Erfolgs- und Fehlerfällen in Bezug auf die in /var/log/amos.log protokollierten Nachrichten?
Sourcejedi
Diese Konfiguration ist auch insofern seltsam, /var/logals sie Eigentum von root ist. Ich denke, Sie möchten ein Verzeichnis verwenden, /var/log/amos/das Sie als Eigentum von amos erstellen.
Sourcejedi
Ich werde wie erwähnt erstellen und die Ergebnisse
zurückmelden

Antworten:

11

Verwenden Sie systemd:

Um das Problem anzuzeigen, verwenden journalctl -xeSie, nachdem Sie den Dienst gestartet haben.

Sie benötigen kein Bash-Skript. Fügen Sie dies in Ihre Servicedatei ein:

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

Es ist nicht erforderlich ExecStop, systemd stoppt alle untergeordneten Prozesse. Sie können die Ausgabe mit anzeigen journalctl -u amos.service.

ctx
quelle
4
Nach ExecStart sollte ein "=" stehen. Ich kann das Problem nicht beheben, da die Bearbeitung weniger als 6 Zeichen umfassen würde.
Mark Stosberg
5

Ich denke, Sie wollen Gabeln statt einfach. Bei Simple wird davon ausgegangen, dass Ihr Prozess nicht beendet wird. Wenn dies der Fall ist, wird der Prozess für tot erklärt.

Sie möchten wahrscheinlich das Skript amos_service.sh entfernen und dessen Funktionalität in amos.service einfügen.

Haufen Frösche
quelle
Nehmen Sie die vorgeschlagenen Änderungen vor. Ich habe darüber gelesen und Ihren Kommentar gesehen. Protokolliert die Ergebnisse zurück.
itprguy