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.config
PID를 저장하는 위치를 확인하십시오 .
답변
적어도 데비안에서는 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
대신 호출 하는 것 같습니다 .restart
test_nginx_config