프로세스가 올바르게 시작되었는지 확인할 수 있도록 서브셸에서 시작된 프로세스의 PID를 캡처하려고 합니다. 해당 프로세스는 퓨마 응용 프로그램입니다.
sudo su - $APPUSER <<-BASH
PID="\$(bundle exec puma -C config/puma.rb)"
"\$(bundle exec puma -C config/puma.rb & export PID=$1)"
"\$(bundle exec puma -C config/puma.rb &)"
PID="\$(ps aux | grep \"[p]uma.*[u]nix.*$APPNAME\" | awk '{ print \$2}')"
BASH
이상한 점은 아무것도 반환하지 않는다는 것입니다. 주변 환경 없이 이 중 하나를 수행하면 ""
다음 오류가 발생합니다.
-bash: line 22: [26740]: command not found
에 있는 숫자 []
는 pid입니다. 스크립트를 다시 실행하면 다음과 같은 결과가 나오므로 이를 알 수 있습니다(pid가 존재하는지 확인합니다).
app is running with pid: 26740
나는 heredoc에서 명령을 실행하고 명령을 전달하기 때문에 이런 일이 발생한다고 생각합니다.sudo su
서브쉘에서 시작된 백그라운드 프로세스에서 pid를 얻는 방법.
답변1
내부 PID
값을 재정의할 수 없습니다. 소문자 환경 변수를 사용하십시오.