Lancer un service au démarrage sous un autre utilisateur

Bonjour,

J’ai deux utilisateurs sonar (uid : 1054) et toto responsables chacun d’une application, Sonar et appToto.

Sonar et appToto sont lancés via des services au démarrage de ma debian. Mon problème est que les services ne sont pas lancés par leurs utilisateurs principaux respectifs (j’imagine que c’est root), donc sonar ne peut pas stopper le service qui lance Sonar.

Ma question est la suivante :
Comment faire lancer par sonar le service qui lance Sonar au démarrage?

Des collègues m’ont dit qu’il faudrait ptêt creuser du côté du “start-stop-daemon” mais je ne vois vraiment pas comment appliquer le start-stop-daemon à mon cas :blush:

Voici plus en détail ce que j’ai :

Mon application Sonar (outil d’évaluation de qualité du code) est lancée via un script shell /home/sonar/sonar prenant en paramètre un start ou un stop
J’ai un utilisateur sonar (uid : 1054)
Mes deux besoins principaux sont les suivants :

  • qu’il soit exécuté au démarrage de ma machine (en cas de reboot de la machine par une tierce personne)
  • que l’utilisateur sonar puisse l’arrêter et le redémarrer mais que mon autre utilisateur toto ne puisse pas l’arrêter ou le redémarrer

Mon service /etc/init.d/sonar est le suivant :

#!/bin/bash
### BEGIN INIT INFO
# Provides:          sonar
# Required-Start:    
# Required-Stop:     
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Démarre/Arrête Sonar
# Description:       Démarre/Arrête Sonar
### END INIT INFO

/home/sonar/sonar $*

Je ne voi pas où mettre mon start-stop-daemon --start --chuid 1054?
Et le start-stop-daemon --stop --chuid 1054??
Il me semble d’autant plus que mon utilisateur sonar n’a pas accès au start-stop-daemon…

Enfin bref, je suis un peu perdu…

Je ne suis pas du tout fermé à une autre solution pouvant résoudre mon problème.

Merci pour votre aide.

modifie le script dans init.d avec

su -l “ton_user” -c “la_commande_ou_le script”

mais je ne connais pas les conséquences si une erreur intervient (place un exit 0 é la fin par sécurité)