人形でユーザーパスを設定するには?

人形でユーザーパスを設定するには?

私に興味深いものがあります。質問この問題は手動で指定することで解決できます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

ユーザーの環境変数はどこに設定されていますかPATHpuppetユーザーに正しい権限があることを確認するにはどうすればよいですか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なので、PATHPassengerの実行時に環境変数はまったく設定されません。

私は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;
    # ...
}

関連情報