아파치 재시작 오류 | (20014)Internal error: Error retrieving pid file logs/httpd.pid

아파치 재시작을 진행했으나

service httpd restart 

(20014)Internal error: Error retrieving pid file logs/httpd.pid
Remove it before continuing if it is corrupted.
  • “pid 파일 로그/httpd.pid를 검색하는 중 오류가 발생했습니다.”
  • “손상된 경우 계속하기 전에 제거하십시오.”

위 두 가지 오류가 확인될 수 있습니다. apachectl restart 등의 명령어를 입력했지만 위와 같은 오류가 발생한 이유는 아파치가 정상적으로 종료되지 않았기 때문에 발생하는 오류입니다.

✅ Error retrieving pid file logs/httpd.pid 해결하기

로그 폴더에서 httpd.pid를 확인했을 때 폴더가 비어 있음을 확인할 수 있습니다.

cd /etc/httpd/logs/

ll httpd.pid
-rw-r--r--    1 root     system            0 Jan 23 13:21 httpd.pid

cp -a httpd.pid httpd.pid_20xx-05-15
  • 백업 파일을 생성한 후에 [Error retrieving pid file logs/httpd.pid] 오류를 해결하는 2가지 방법은 다음과 같습니다.

1. 원본 파일 백업 후 루트 계정의 pid 값 넣기

  • ps 명령어로 694 pid를 httpd.pid에 입력한 후에
ps -ef | grep httpd
root         694       1  0 13:21 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
nobody       749     694  0 13:21 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
nobody       752     694  0 13:21 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
nobody       753     694  0 13:21 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
nobody       754     694  0 13:21 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
root        1495    1463  0 13:33 pts/0    00:00:00 grep --color=auto httpd


vi httpd.pid
694
:wq

service httpd stop
service httpd start

2. 아파치 강제 종료하기

첫 번째 방법으로 진행이 해결이 되겠지만 다른 방법으로 httpd를 강제 종료 할 수 있습니다. pid를 하나 씩 kill 시키긴 힘들기 때문에 “killall -9 httpd” 명령어를 실행합니다.

killall -9 httpd
service httpd start

해결이 안될 경우 httpd.pid 파일을 삭제 후 재시작을 해도 됩니다. httpd 구동 시 자동 생성되는 파일이기 때문에 삭제해도 괜찮습니다.

리눅스Linux(회색 배경의 나무 큐브)

✅ httpd.pid 파일이란?

Apache 웹 서버에서 사용되는 PID(프로세스 ID 번호)는 서버의 파일에 저장되며, 웹 서버 구성 파일로 예를 들어 httpd.conf 파일에 PID 파일의 위치가 설정되어 있을 수 있습니다.

vi /etc/httpd/conf/httpd.conf

PidFile logs/httpd.pid

# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>

위와 같은 PidFile 설정이 되어 있다면,

~]# ps -ef | grep httpd 

root        1512       1  0 13:45 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
nobody      1514    1512  0 13:45 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
nobody      1515    1512  0 13:45 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
nobody      1516    1512  0 13:45 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
nobody      1517    1512  0 13:45 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
root        1731    1463  0 13:45 pts/0    00:00:00 grep --color=auto httpd
]# cat httpd.pid
1512

ps 명령어와 cat 명령어로 pid가 일치함을 확인할 수 있습니다.

실행중인 HTTP에 httpd.pid가 필요한 이유는 아파치 서버가 시작되면 HTTP 서버는 httpd.pid 파일에 pid(프로세스 ID)를 기록하는데 현재 서버에서 실행 중인 httpd 서버 프로세스의 pid 번호이며, httpd 서버가 다시 시작될 때마다 새로운 pid가 생성됩니다.

서버 프로세스는 pid 파일을 검사하여 자체 중지하거나 다른 httpd 프로세스가 중복으로 2번 실행되는 것을 막을 수 있습니다. PidFile을 사용해서 서버의 위험 요소를 수동으로 제거할 수 있습니다.

리눅스(펜과 안경)

Error retrieving pid file logs/httpd.pid와 PidFile에 대해 알아봤습니다.

Similar Posts