나한테 흥미로운 게 있어질문이 문제는 수동으로 지정하여 해결할 수 있습니다 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;
# ...
}