
私に興味深いものがあります。質問この問題は手動で指定することで解決できますPATH
。
問題は、私のroot
ユーザーが次のようなことですPATH
。
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
NGINX / PassengerでPuppet Masterをuserとして実行すると、次puppet
のようPATH
に設定されます。
/usr/sbin:/sbin
ユーザーの環境変数はどこに設定されていますかPATH
?puppet
ユーザーに正しい権限があることを確認するにはどうすればよいですかPATH
?ユーザーにシェルがありません:
puppet:x:103:106::/var/lib/puppet:/bin/false
Puppet Masterの起動を担当するRackファイルにconfig.ru
次の文を挿入して、PATH
ユーザーが何をpuppet
実行しているかを確認しました。
puts "PATH: " + ENV.fetch('PATH', 'null')
出力はPATH: null
なので、PATH
Passengerの実行時に環境変数はまったく設定されません。
私はUbuntu 14.04 amd64を実行しているDockerコンテナで作業しています。
答え1
通常、LinuxはPATH
ドットファイルを読み取り、環境変数を設定します。ログインして/etc/profile
読んでください。デフォルトの環境変数を設定したら、たとえば.shell_profile
ドット.bash_profile
ファイルがない場合は読み込みを試み.bash_login
、存在しない場合は検索します.profile
。
問題に戻りましょう。ユーザーにpuppet
シェルがないか、上記のファイルをホストしません。を実行してみると確認できますecho "$SHELL" && echo "$PATH"
。
PATH
ドットファイルのいずれかを使用して手動で設定したり、次の内容を表示したりできます。http://www.puppetcookbook.com/posts/set-global-exec-path.html
答え2
言う通りNGINXドキュメントから:
デフォルトでは、nginxは親プロセスから継承されたすべての環境変数(TZ変数を除く)を削除します。
私の特定の問題に対する解決策は、いくつかの異なる方法で達成することができます。
解決策1:RubyにPATH変数を追加する
config.ru
ファイルを編集して簡単に定義できますPATH
(まだ定義されていない場合)。
if not ENV['PATH']
ENV['PATH'] = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
end
これは単純で問題を解決しますが、再び見えない構成には隠されています。
解決策2:NGINXでPATH変数を設定する
NGINXサイト構成に変数を設定すると、PATH
問題の「即時使用可能」ソリューションが得られます。
server {
listen 8140 ssl default_server;
# ...
# manually set PATH for Passenger; see PUP-3000
env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
passenger_enabled on;
# ...
}