Je veux exécuter un script à chaque démarrage de mon serveur. Le problème est que je dois être un certain utilisateur pour exécuter le script, si j'essaie de le faire en tant que root, il ne peut pas trouver certains packages (tels que ruby).
J'essaie de passer à xxx user01.
sudo su user01
/etc/init.d/script start
Cela ne fonctionne pas cependant.
ubuntu
startup-scripts
rc.local
Philippe
la source
la source
su
dans le script rc?Réponses:
L'exécution
sudo su user01
dans un script ne signifie pas que les commandes suivantes sont envoyées au shell résultant. En fait, cela signifie probablement qu'un nouveau shell est généré en tant qu'utilisateur01, qui ne se ferme jamais!Deux choses:
-c 'command...'
argument à su, commesu user01 -c '/etc/init.d/script start'
.chkconfig
ouupdate-rc.d
. Vous ne voulez pas non plus que les travaux dans /etc/init.d ne soient pas démarrés en tant queroot
. Les tâches elles-mêmes peuvent se sentir libres de se bifurquer vers un autre compte utilisateur, mais doivent être appelées par root.la source
Vous pouvez mettre quelque chose
/etc/crontab
et le faire fonctionner@reboot
la source
Vous pouvez simplement exécuter la commande via sudo comme ceci:
-H définit la variable d'environnement HOME sur celle de l'utilisateur
-u spécifie le nom d'utilisateur à exécuter en tant que
la source
Vous ne pouvez sûrement pas exécuter ce script avec sudo à cause de requireetty (impose que les utilisateurs doivent être connectés) dans sudoers. Vous voudrez peut-être désactiver, ce qui est quelque peu risqué
Il existe également un outil un peu ancien appelé runsuid: http://freecode.com/projects/runsuid
HTH
la source