Exécuter un service systemd en tant qu'utilisateur autre que root!

18

J'ai créé le service suivant, amos.service, et il doit fonctionner en tant qu'amos (membre du groupe 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

toutes les autorisations ont été définies sur /usr/share/amoslaamos:amos

amos_service.sh est le suivant:

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

Lorsque j'exécute le service initialement sans aucune modification des répertoires, c'est-à-dire, appartenant à root et amos.service n'ayant pas le paramètre User not Group, tout fonctionne très bien!

Une fois que j'ai changé les autorisations des répertoires en amos: amos et ajouté l'utilisateur et le groupe amos.service, le serive ne fonctionnera pas et j'obtiens ce qui suit: Voir l'image jointe

Erreur après avoir tenté d'exécuter le service

itprguy
la source
Quelle est la différence, le cas échéant, entre les cas de réussite et d'échec en termes de messages enregistrés dans /var/log/amos.log?
sourcejedi
En outre, cette configuration est étrange car elle /var/logappartient à root. Je pense que vous souhaitez utiliser un répertoire /var/log/amos/que vous créez comme appartenant à amos.
sourcejedi
Je vais créer comme mentionné et enregistrer les résultats
itprguy

Réponses:

11

Utilisez systemd:

Pour afficher le problème, utilisez journalctl -xeaprès avoir démarré le service.

Vous n'avez pas besoin d'un script bash, mettez-le dans votre fichier de service:

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

Cela n'est pas nécessaire ExecStop, systemd arrêtera tous les processus enfants. Vous pouvez afficher la sortie avec journalctl -u amos.service.

ctx
la source
4
Il devrait y avoir un "=" après ExecStart. Je ne peux pas le réparer car la modification comporterait moins de 6 caractères.
Mark Stosberg
5

Je pense que vous voulez bifurquer plutôt que simple. Simple suppose que votre processus ne se termine pas, donc quand il le fait, il appelle le processus mort.

Vous souhaiterez probablement supprimer le script amos_service.sh et mettre ses fonctionnalités dans amos.service.

pileofrogs
la source
Apportera les modifications suggérées ... lisait à ce sujet et a vu votre commentaire. Enregistre les résultats.
itprguy