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/amos
zuamos: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
/var/log
als sie Eigentum von root ist. Ich denke, Sie möchten ein Verzeichnis verwenden,/var/log/amos/
das Sie als Eigentum von amos erstellen.Antworten:
Verwenden Sie systemd:
Um das Problem anzuzeigen, verwenden
journalctl -xe
Sie, nachdem Sie den Dienst gestartet haben.Sie benötigen kein Bash-Skript. Fügen Sie dies in Ihre Servicedatei ein:
Es ist nicht erforderlich
ExecStop
, systemd stoppt alle untergeordneten Prozesse. Sie können die Ausgabe mit anzeigenjournalctl -u amos.service
.quelle
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.
quelle