[ubuntu] Ubuntu에서 구성 테스트가 성공한 후에 만 ​​nginx를 다시 시작하려면 어떻게해야합니까?

Ubuntu 서버의 명령 줄에서 nginx 서비스를 다시 시작할 때 nginx 구성 파일에 오류가 있으면 서비스가 충돌합니다. 다중 사이트 서버에서는 구성 오류가없는 사이트도 포함하여 모든 사이트가 다운됩니다.

이를 방지하기 위해 먼저 nginx 구성 테스트를 실행합니다.

nginx -t

테스트가 성공적으로 실행 된 후 서비스를 다시 시작할 수 있습니다.

/etc/init.d/nginx restart

또는 다시 시작하지 않고 nignx 사이트 구성 만 다시로드합니다.

nginx -s reload

다시 시작 명령이 구성 테스트 결과에 조건부 인 두 명령을 결합하는 방법이 있습니까?

나는 이것을 온라인에서 찾을 수 없었고 이것에 대한 공식 문서 는 다소 기본적입니다. 나는 리눅스를 그다지 잘 모르기 때문에 내가 찾고있는 것이 내 앞에 있는지 또는 전혀 불가능한지 모르겠다.

nginx v1.1.19를 사용하고 있습니다.



답변

실제로 내가 아는 한 nginx는 빈 메시지를 표시하고 구성이 잘못되면 실제로 다시 시작하지 않습니다.

그것을 망치는 유일한 방법은 nginx 중지를 한 다음 다시 시작하는 것입니다. 중지는 성공하지만 시작은 실패합니다.


답변

nginx 1.8.0부터 올바른 솔루션은 다음과 같습니다.

sudo nginx -t && sudo service nginx reload

버그로 인해 구성 파일에 오류가 있어도 configtest항상 0 종료 코드를 반환합니다 .


답변

구성 테스트가 성공한 경우에만 다음 명령을 사용하여 Nginx (버전 1.5.9)를 다시로드합니다.

/etc/init.d/nginx configtest && sudo /etc/init.d/nginx reload

이 작업을 자주 수행해야하는 경우 별칭을 사용할 수 있습니다. 다음을 사용합니다.

alias n='/etc/init.d/nginx configtest && sudo /etc/init.d/nginx reload'

여기서 트릭은 첫 번째 명령이 성공한 경우에만 두 번째 명령을 실행하는 “&&”에 의해 수행됩니다. 여기 에서 “&&”연산자 사용에 대한 자세한 설명을 볼 수 있습니다 .

서버를 다시 시작하려면 “reload”대신 “restart”를 사용할 수 있습니다.


답변

alias nginx.start='sudo nginx -c /etc/nginx/nginx.conf'
alias nginx.stop='sudo nginx -s stop'
alias nginx.reload='sudo nginx -s reload'
alias nginx.config='sudo nginx -t'
alias nginx.restart='nginx.config && nginx.stop && nginx.start'
alias nginx.errors='tail -250f /var/logs/nginx.error.log'
alias nginx.access='tail -250f /var/logs/nginx.access.log'
alias nginx.logs.default.access='tail -250f /var/logs/nginx.default.access.log'
alias nginx.logs.default-ssl.access='tail -250f /var/logs/nginx.default.ssl.log'

그런 다음 “nginx.reload”명령 등을 사용합니다.


답변

/etc/init.d/nginx reload및 사용하여 다시로드 할 수 있습니다.sudo service nginx reload

경우 nginx -t다음 몇 가지 오류가 발생이 다시로드되지 않습니다

따라서 &&를 사용하여 동시에 실행하십시오.

처럼

nginx -t && /etc/init.d/nginx 다시로드


답변

신호를 사용하여 nginx를 제어 할 수 있습니다.

문서에 따르면 nginx 마스터 프로세스에 HUP 신호를 보내야합니다.

HUP-구성 변경, 변경된 시간대 유지 (FreeBSD 및 Linux에만 해당), 새 구성으로 새 작업자 프로세스 시작, 이전 작업자 프로세스의 정상 종료

http://nginx.org/en/docs/control.html 에서 문서를 확인하십시오.

다음과 같이 nginx 마스터 프로세스 PID에 HUP 신호를 보낼 수 있습니다.

kill -HUP $( cat /var/run/nginx.pid )

위의 명령은에서 nginx PID를 읽습니다 /var/run/nginx.pid. 기본적으로 nginx pid가 작성 /usr/local/nginx/logs/nginx.pid되지만 config에서 재정의 할 수 있습니다. nginx.configPID를 저장하는 위치를 확인하십시오 .


답변

적어도 데비안에서는 nginx 시작 스크립트에 다음을 수행하는 다시로드 기능이 있습니다.

reload)
  log_daemon_msg "Reloading $DESC configuration" "$NAME"
  test_nginx_config
  start-stop-daemon --stop --signal HUP --quiet --pidfile $PID \
   --oknodo --exec $DAEMON
  log_end_msg $?
  ;;

당신이해야 할 일은 호출하기 때문에 service nginx reload대신 호출 하는 것 같습니다 .restarttest_nginx_config