Ich habe einige Probleme mit einem unserer Upstart-Skripte, die den Benutzer wechseln und einige Ruby-Daemon-Prozesse starten.
In der Vergangenheit habe ich einfach darauf bash -c "do the business" -l someusergeachtet, das -lFlag zu verwenden, um ein Login zu emulieren.
Dies hat bis jetzt sehr gut funktioniert. Unser Ruby-Prozess hat den folgenden Fehler ausgelöst: require: no such file to load -- rubygems (LoadError)Nach einigen Untersuchungen stellte ich fest, dass dieser Fehler nur auftritt, wenn ich das Skript als Root-Benutzer ausführe, dh (wenn ich sudo suoder wenn ich von upstart ausgeführt werde).
Ich denke, dies ist ein PATH-Problem, da das Problem behoben wird, wenn ich den Pfad zuerst manuell einstelle.
Gibt es eine Möglichkeit, den Benutzer zu wechseln und die gesamte Umgebung zu laden ?
Ich habe es auch versucht su user -cund sudo.
Um das Testen zu vereinfachen, "roote" ich ( sudo su) und laufe which bundle(Bundle ist eine rubinrote Sache).
Folgendes bekomme ich:
sudo -i -u webuser which bundle# => keine Ausgabesu -l webuser -c which bundle# => keine Ausgabesudo su - webuser -c which bundle# => keine Ausgabe
Aber ssh'd als Webuser
which bundle# => / opt / ruby / bin / bundle
/etc/profile ~/.bash_profile ~/.bash_loginund ~/.profile. Bei Login-Shells wertet bash diese in der angegebenen Reihenfolge aus.
su - user -c?