J'ai des problèmes avec un de nos nouveaux scripts qui change d'utilisateur et démarre quelques processus de démon ruby.
Dans le passé, je bash -c "do the business" -l someuser
m'assurais simplement d'utiliser le -l
drapeau pour émuler une connexion.
Cela a très bien fonctionné jusqu'à présent, notre processus Ruby a généré l'erreur suivante: require: no such file to load -- rubygems (LoadError)
après une enquête, j'ai trouvé que cette erreur ne se produit que lorsque j'exécute le script en tant qu'utilisateur root, c'est-à-dire (lorsque je sudo su
ou lorsqu'il est exécuté par upstart).
Je pense que c'est un problème de CHEMIN, car lorsque j'ai défini manuellement le chemin, il résout le problème.
Existe-t-il un moyen de changer d'utilisateur et de charger tout l' environnement?
J'ai aussi essayé su user -c
et sudo
.
Pour le rendre plus facile à tester, je suis "enraciné" ( sudo su
) et en cours d'exécution which bundle
(le bundle est une chose rubis).
Voici ce que j'obtiens:
sudo -i -u webuser which bundle
# => pas de sortiesu -l webuser -c which bundle
# => pas de sortiesudo su - webuser -c which bundle
# => pas de sortie
Mais en tant qu'utilisateur Web
which bundle
# => / opt / ruby / bin / bundle
/etc/profile
~/.bash_profile
~/.bash_login
et ~/.profile
. Pour les shells de connexion, bash les évalue dans l'ordre donné.
su - user -c
?