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/amos
laamos: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
/var/log
appartient à root. Je pense que vous souhaitez utiliser un répertoire/var/log/amos/
que vous créez comme appartenant à amos.Réponses:
Utilisez systemd:
Pour afficher le problème, utilisez
journalctl -xe
après avoir démarré le service.Vous n'avez pas besoin d'un script bash, mettez-le dans votre fichier de service:
Cela n'est pas nécessaire
ExecStop
, systemd arrêtera tous les processus enfants. Vous pouvez afficher la sortie avecjournalctl -u amos.service
.la source
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.
la source