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 someuserm'assurais simplement d'utiliser le -ldrapeau 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 suou 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 -cet 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_loginet ~/.profile. Pour les shells de connexion, bash les évalue dans l'ordre donné.
su - user -c?