J'ai créé le service suivant, amos.service, et il doit s'exécuter 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
à amos: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
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:
ExecStart=/usr/share/amos/run_amos.sh
Il n'y a pas besoin de ExecStop
, systemd arrêtera tous les processus enfants. Vous pouvez afficher la sortie avec journalctl -u amos.service
.
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 voudrez probablement supprimer le script amos_service.sh et mettre ses fonctionnalités dans amos.service.