Comment changer d'utilisateur dans un script sh?

Bonjour,
Je souhaite lancer automatiquement mon client folding@home au démarrage de mon ordinateur. J’ai trouvé cette méthode : debian-administration.org/articles/28

Pour faire un lancement propre, j’ai crée un utilisateur folding, par contre dans mon script j’arrive pas à changer d’utilisateur :

[code]#! /bin/sh

/etc/init.d/folding@home

Some things that run always

touch /var/lock/folding@home

Carry out specific functions when asked to by the system

case “$1” in
start)
echo "Starting script folding@home"
su - folding
cd /home/folding/folding
nohup ./FAH504-Linux.exe &
;;
stop)
echo "Stopping script folding@home"
echo “Could do more here”
;;
*)
echo "Usage: /etc/init.d/folding@home {start|stop}"
exit 1
;;
esac

exit 0
[/code]

Au lancement du script à la main il semble s’arrêter après le changement d’utilisateur.
Merci d’avance.

Bon, je ne sais pas si tu as vu qu’il y avait un paquet kfolding pour kde. Je ne le vois tirer aucune dépendance, mais tu peux peut être t’en sortir sans install “à la mano”.

Sinon, pour ton script, tu as bien chopé le principe mais pas les habitudes, comme c’est utile de respecter un format canonique, je m’étends:
d’abord, on met un “cartouche” de commentaires indiquant quelques infos qui sont utilisés par rc-update, genre pour freshclam par exemple:

[code]### BEGIN INIT INFO

Provides: clamav-freshclam

Required-Start: $syslog

Should-Start: clamav-daemon

Required-Stop:

Should-Stop:

Default-Start: 2 3 4 5

Default-Stop: 0 6

Short-Description: ClamAV virus database updater

Description: Clam AntiVirus virus database updater

END INIT INFO[/code]Ca n’empêche pas de fonctionner, mais ça donne les éléments pour que le rc-update default fonctionne bien.

Ensuite, il est de bon usage de regrouper les noms des commandes et des fichiers utilisés dans des variables en début de script, et en particulier un élément important que tu n’utilises pas mais qui est bien utiles: le fichier de PID qui permet de killer facilement le demon:

DAEMON=/home/folding/folding/FAH504-Linux.exe NAME=folding@home DESC="Démon de folding@home" CHUID="folding" PIDFILE=/var/run/folding.pid
Ensuite, il y a toute une batterie de fonctions standards de la lsb pour lancer proprement les démons, déclarées dans un include exterieur qu’il faut “sourcer” pour pouvoir les utiliser:

if ! [ -x "/lib/lsb/init-functions" ]; then . /lib/lsb/init-functions else echo "E: /lib/lsb/init-functions not found, lsb-base (>= 3.0-6) needed" exit 1 fi
on teste aussi à tous hasard que tout est là pour démarrer:

aprés, en utilisant les routines fournies par la lsb, l’ecriture de start et stop avec un user non root devient triviale:

case "$1" in start) log_daemon_msg "Starting $DESC" "$NAME" start-stop-daemon --start --quiet \ --pidfile $PIDFILE \ --chuid $CHUID \ --exec $DAEMON || log_end_msg 1 log_end_msg 0 ;; stop) log_daemon_msg "Stopping $DESC" "$NAME" start-stop-daemon --stop --quiet --retry 15 --oknodo \ --pidfile $PIDFILE \ --exec $DAEMON || log_end_msg 1 log_end_msg 0 ;; restart|force-reload) # # If the "reload" option is implemented, move the "force-reload" # option to the "reload" entry above. If not, "force-reload" is # just the same as "restart". # echo -n "Restarting $DESC: " log_daemon_msg "Restarting $DESC: " start-stop-daemon --stop --quiet --retry 15 --oknodo --pidfile \ /var/run/$NAME.pid --exec $DAEMON || log_end_msg 1 start-stop-daemon --start --quiet --pidfile \ /var/run/$NAME.pid --exec $DAEMON || log_end_msg 1 log_end_msg 0 ;; *) N=/etc/init.d/$NAME # echo "Usage: $N {start|stop|restart|force-reload}" >&2 log_action_msg "Usage: $N {start|stop|restart|force-reload}" >&2 exit 1 ;; esac
Et voilà !

Merci beaucoup pour ces explications, je test ça ce week-end.

Bravo tous les deux :wink:
j’ai buté pas mal de temps sur ce problème précis, et je vois là une réponse servie sur un plateau :slightly_smiling:, super MattOTop :wink:

Ca marche nickel.
Le seul soucis, s’est qu’au premier lancement FAH504-Linux.exe, n’a pas trouvé son bon répertoire.

Donc j’ai pris l’exemple exact, pour lancer un script ksh qui fait un changement de répertoire et un nohup de FAH504-Linux.exe.

Merci beaucoup, pour cette solution.

dans la page de manuel de start-stop-daemon, tu verras qu’il y a un -d /path pour preciser dans quel répertoire ça se lance.