Nginx가 중지되지 않고 nginx.pid가 누락되었습니다


33

Nginx를 중지하고 싶지만 이렇게 실패합니다.

$ sudo service nginx stop
Stopping nginx:                                            [FAILED]

그리고 nginx.conf그것은 nginx.pid의 위치에 선이 있습니다.

# /etc/nginx/nginx.conf
pid        /var/run/nginx.pid;

그러나 nginx.pid디렉토리 에는 없습니다 /var/run/.

locate nginx.pid 이 출력을 보여줍니다.

/var/run/nginx.pid 
/var/run/nginx.pid.oldbin

그러나 updatedb검색과 일치하는 것이 없습니다. 에서 nginx / 1.4.4를 사용하고 CentOS release 6.5 (Final)있습니다.

nginx 데몬을 중지하려면 어떻게해야합니까?

2014/01/07 수정

이 결과는 ps -ef | grep nginxnginx 데몬이 여전히 실행중인 것 같습니다.

ironsand 17065 16933  0 15:55 pts/0    00:00:00 grep --color nginx
root     19506     1  0  2013 ?        00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
ironsand 19507 19506  0  2013 ?        00:00:25 nginx: worker process  

그리고이 sudo service nginx restart오류가 발생합니다. nginx오래된 것이 아직 살아 있기 때문에 시작하지 못하는 것 같습니다 . 그리고이 /var/log/nginx/error.log-2014017오류도 포함되어 있습니다.

Stopping nginx:                                            [FAILED]
Starting nginx: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
                                                           [FAILED]

3
nginx가 실행 중이 지 않으면 시스템을 중지 할 수 없으며 PID 파일이 없으므로 이미 중지 된 것으로 보입니다. ps -ef | grep nginx또는로 확인할 수 있습니다 sudo netstat -tlnp | grep nginx.
Ladadadada

1
조언 해 주셔서 감사합니다. ps명령 결과를 추가했습니다 .
ironsand

답변:


37

먼저 마스터 프로세스를 종료하여 nginx를 중지하는 것이 좋습니다. nginx가 제대로 종료되지 않은 것은 init 스크립트를 사용하여 중지 할 수 없기 때문일 수 있습니다.

ps -ef | grep nginx

nginx 마스터 프로세스의 PID가 표시됩니다. 위에서 언급 한 것처럼 :

루트 19506 10 2013? 00:00:00 nginx : 마스터 프로세스 / usr / sbin / nginx -c /etc/nginx/nginx.conf

사용하여 죽여라

죽이기 -19 19506

nginx 프로세스가 실행 중이거나 포트 80이 사용 중인지 다시 확인하십시오. 프로세스가 포트 80에 바인드 된 경우 PID를 식별하고 종료 될 수 있는지 확인하십시오.

ps -ef | grep nginx

netstat -tulpn | grep 80

파일 시스템이 올바른지 확인하고 / var 파일 시스템을 읽고 쓸 수 있습니다. 그런 다음 nginx를 시작하십시오

서비스 nginx 시작


감사! 마스터 프로세스를 종료 한 후 nginx 작업자 프로세스도 종료해야했습니다. 그런 다음 마침내 nginx 데몬을 시작할 수 있습니다.
ironsand

당신은 지금 Sandeep 영혼을 구했습니다! 기록해 주셔서 감사합니다 ..
Thale

감사합니다 @ sandeep.s85. 나에게도 유용합니다. nginx가 실행되는 동안 nginx.pid 파일이 누락되는 원인은 무엇입니까?
Codemonkey

이 문제가 다시 발생했습니다. 원인이 무엇인지 알고 싶습니다.
Codemonkey

내 nginx 마스터 프로세스는 내가 죽인 후에 다시 살아납니다.
WTIFS

11

문제

나를 위해 pid 파일 이름은 두 파일에서 다릅니다.

  • /usr/lib/systemd/system/nginx.service
    • pid /var/run/nginx.pid;
  • /etc/nginx/nginx.conf
    • PIDFile=/run/nginx.pid

이 둘은 일치해야합니다.

고치다:

그래서 /usr/lib/systemd/system/nginx.service에서 조정 한 후 다음을 수행했습니다.

systemctl daemon-reload
systemctl start nginx

그런 다음 올바르게 나타났습니다.


3
어떻게 오세요? 우분투 /var/run/에서/run/
Z. Zlatev

그러나 그것은 전혀 해결책이 아닙니다. 그러나 제 경우에는 모든 것이 /run/nginx.pid입니다.
danger89

내 nginx.conf에 pid logs / nginx.pid가 있습니다-/run/nginx.pid로 변경되었으며 Patrick 덕분에 수정되었습니다!
phpguru

9

나는이 문제가 있었고, 달리는 ps -ef | grep nginx것은 받아 들여진 대답에 의해 제안 된 마스터 프로세스를 죽 였음에도 불구하고 계속 회전하는 노동자를 보여줍니다.

[~]# ps -ef | grep nginx
nginx    10730     1  0 Sep14 ?        00:00:16 nginx: cache manager process            
nginx    18469     1  0 Oct09 ?        00:11:02 nginx: worker process                   
nginx    25779     1  0 Oct13 ?        00:01:31 nginx: worker process                   
nginx    26458     1  0 15:45 ?        00:00:00 nginx: worker process    

그래서 그것을 고치는 나의 해결책 은 간단합니다 :pkill nginx && service nginx restart


1

내 문제는 내가 pid두 개의 다른 conf 파일에 지정 했다는 것 입니다. 하나의 참조를 제거한 다음 .pid파일 을 삭제하고 nginx를 다시 시작하면 정상적으로 작동하기 시작했습니다.


이것 네, PID는 /usr/lib/systemd/system/nginx-debug.service 및 /etc/nginx/nginx.conf에 정의되어있다
edmondscommerce

0

이것은 nginx가 이전에 시작된 경우 즉시 충돌하고 있음을 나타냅니다. /var/log/nginx*프로세스가 수행중인 작업 을 확인하기 위해 내용을 확인 했습니까 ?

편집 : 또한 OS와 nginx 버전을 알려 주면 더 자세한 답변을 줄 수 있습니다.


0

더 많은 정보가 필요하지만 원하는 ngnix 인스턴스가 아닌 다른 웹 서버 가 이미 실행 중이므로 찾아야합니다. 포트 80이 사용 중이지만 오류가 발생했습니다. 뭐

시도 netstat -tulpn-로컬 주소 아래에서 : 80으로 끝나는 항목을 찾고 있습니다. 또한 프로그램 이름과 PID를 제공하여 식별 할 수 있습니다. 여기 내 것이 있습니다-lighttpd를 실행 중이며 세 번째 줄에 표시됩니다.

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:5000          0.0.0.0:*               LISTEN      4684/rtorrent
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      923/php-fpm.conf)
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      972/lighttpd
tcp        0      0 0.0.0.0:6901            0.0.0.0:*               LISTEN      4684/rtorrent
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      720/sshd
tcp6       0      0 :::22                   :::*                    LISTEN      720/sshd
udp        0      0 0.0.0.0:6881            0.0.0.0:*                           4684/rtorrent

다른 웹 서버를 올바로 종료하고 (시작이 시작되면 정상적인 'kill'이 작동하지 않을 수 있으므로) ngnix를 시작하십시오. 이 경우 init 스크립트를 편집하여 다른 웹 서버의 시작을 중지하거나 다른 전원으로 구성을 조정할 수 있습니다.


당신의 도움을 주셔서 감사합니다. netstat -tulpn보여줍니다 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 19507/nginx. 그래서 nginx는 그 포트를 점유했습니다. 그러나 sandeep이 말했듯이 nginx 프로세스를 종료하면 작동합니다. 도와 주셔서 감사합니다!
ironsand

0

우분투 10.10과 비슷한 문제가 있었고 / opt / nginx / sbin에서 실행중인 컴파일 된 버전의 nginx가있었습니다.

/opt/nginx/conf/nginx.conf 및 /etc/nginx/nginx.conf 파일을 모두 확인하고 일치하는지 확인하십시오.

다음을 사용하여 nginx.pid 위치 테스트와 일치하도록 /etc/init.d/nginx 시작 파일을 조정하십시오.

sudo /etc/init.d/nginx configtest # should show no failures
sudo /etc/init.d/nginx start      # should show starting
sudo /etc/init.d/nginx status     # should show running
sudo /etc/init.d/nginx stop       # should show stopping -- (wait for a few)
sudo /etc/init.d/nginx status     # should show can not access PID file for nginx
sudo netstat -tap  # should not show nginx program running with open local address

0

nginx를 중지하려면 사용 방법을 확인하십시오 man nginx.

기본 방법은로 정지 신호를 사용하는 것입니다 nginx -s stop.

정말 간단해야합니다. 귀하의 옵션은 다음과 같습니다

stop, quit, reopen, reload.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.