ユーザーを変更していくつかのRubyデーモンプロセスを起動する、私たちのupstartスクリプトに問題があります。
以前は、_bash -c "do the business" -l someuser
_フラグを使用してログインをエミュレートするようにして、単に_-l
_を使用していました。
これはこれまでうまく機能しており、Rubyプロセスが次のエラーをスローしています:require: no such file to load -- rubygems (LoadError)
調査の結果、このエラーは、スクリプトをルートとして実行したときにのみ発生することがわかりましたユーザー、つまり(私が_Sudo su
_のとき、またはupstartによって実行されているとき)。
最初にパスを手動で設定すると問題が解決するため、これはPATHの問題だと思います。
ユーザーを変更して全体環境をロードする方法はありますか?
_su user -c
_とSudo
も試しました。
テストを簡単にするために、私は "ルート化"(_Sudo su
_)し、_which bundle
_を実行しています(バンドルはRubyのことです)。
ここに私が得るものがあります:
Sudo -i -u webuser which bundle
_#=>出力なしsu -l webuser -c which bundle
_#=>出力なしSudo su - webuser -c which bundle
_#=>出力なししかし、sshはwebuserとして
which bundle
_#=>/opt/Ruby/bin/bundleSudo su - user -c
を使用すると、パスを継承する人としてログインしたようになります。そのため、su user
はsu - user
とは異なります。
ただし、.bashrc
ファイルにパスを設定している場合は、インタラクティブセッション(つまり、そのユーザーとしてsshでログイン)に対してのみ有効です。
代わりに.bash_profile
または/etc/profile
を使用する必要があります。 this を参照してください。
ログインコンテキストには、次のいずれかを使用します。
Sudo -i -u USER COMMAND
su -l USER -c COMMAND