ユーザーを変更し、いくつかのrubyデーモンプロセスを起動する、私たちのupstartスクリプトに問題があります。
以前bash -c "do the business" -l someuser
は、-l
フラグを使用してログインをエミュレートすることを確認するだけでした。
これは今までうまく機能しており、ルビープロセスは次のエラーをスローしていました:require: no such file to load -- rubygems (LoadError)
調査の結果、このエラーはスクリプトをrootユーザーとして実行した場合(つまり、私sudo su
またはupstartで実行した場合)にのみ発生することがわかりました。
最初にパスを手動で設定すると問題が解決するため、これはPATHの問題だと思います。
ユーザーを変更して環境全体をロードする方法はありますか?
私も試してみましたsu user -c
とsudo
。
テストを簡単にするために、私は「ルート化」(sudo su
)して実行していますwhich bundle
(バンドルはルビーです)。
ここに私が得るものがあります:
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 / bundle
それはどのような分布ですか?
—
artistoex
スクリプトは、ユーザーごとにインストールされたRubyモジュールに依存していますか?
—
キース
@artistoexそれはubuntuです:)
—
Daniel Upton
それが本当にPATHの問題であることを確認します(スクリプトの変数をダンプします)。そして、パスとを見て比較
—
artistoex 2012
/etc/profile
~/.bash_profile
~/.bash_login
して~/.profile
。ログインシェルの場合、bashはこれらを指定された順序で評価します。
su - user -c
か?