nginx service Failed to parse PID from file 오류 해결 방법

웹 사이트를 운영하거나 서버 관리를 하는 데 있어서 가장 중요한 요소 중 하나는 바로 웹 서버입니다. 웹 서버는 사용자의 요청을 받아 그에 맞는 결과를 반환하는 핵심적인 역할을 담당하며, 그 성능과 안정성은 웹 사이트의 품질을 결정짓습니다.

그런데 이 웹 서버 소프트웨어에도 여러 종류가 있습니다. Apache, IIS, Tomcat 등 다양한 웹 서버 소프트웨어가 있지만, 최근 가장 주목받고 있는 것은 바로 Nginx입니다. Nginx는 고성능과 확장성, 높은 안정성 등의 특징으로 많은 개발자들에게 사랑받고 있습니다. 대형 인터넷 기업에서부터 작은 스타트업까지 다양한 규모의 회사에서 활용되고 있으며, 그 사용률은 점점 더 증가하고 있습니다.

systemd[1]: nginx .service: Failed to parse PID from file /run/nginx.pid: Invalid argume>

nginx

이렇게 nginx를 사용하다가 systemctl status nginx를 이용해 Nginx의 상태를 체크하는데 위와 같은 오류가 같이 표시되는 경우가 있습니다. 이러한 문제는 Nginx와 systemd 간의 경쟁으로 발생하는 것으로 , ExecStartPost를 추가해 Nginx가 제대로 시작될 때까지 기다리게 하면 경쟁을 해결하는 데 도움이 되며, 적용 과정은 다음과 같습니다.

아래 설명은 comeinsidebox.com 에서 테스트 및 검증 후 작성 된 내용이지만 이것이 본문의 내용의 정확성이나 신뢰성에 대해 보증을 하는 것은 아니니 단순 하게 참고용으로 확인바랍니다.

튜토리얼 환경: ubuntu 22.04, nginx

오류 증상

PID-오류
PID 오류

Nginx가 제대로 시작되기 전에 systemd가 프로세스 ID (PID) 파일을 읽으려고 시도하여 발생하게되며 이로 인해 PID 파일을 제대로 읽지 못하고 오류 메시지가 표시되는 것 인데요. PID 파일 관련 오류는 일반적으로 Nginx 실행에 지장을 주지 않는 경고 메시지이며, 웹 서버의 기능에 큰 영향을 미치지 않지만 이 부분이 거슬리는 경우 다음 과정으로 문제를 개선할 수 있습니다.

이 문제를 해결하기 위해서는 Nginx가 시작된 후에 실행되도록 systemd 서비스 구성 파일에 ExecStartPost를 추가하면 됩니다. 이로 인해 Nginx가 제대로 시작될 때까지 기다리게 해 Nginx가 실행 중인 PID 파일을 생성하고 systemd가 올바른 PID를 읽게 됩니다.

윈도우10 부팅 시 검은 화면에 마우스 커서만 나오는 경우 해결 방법

ExecStartPos 지연 옵션 등록

Nginx 서비스를 systemd로 관리하기 위한 설정이 담겨 있는 파일을 열고 ExecStartPost 옵션을 수정합니다.

sudo vi /lib/systemd/system/nginx.service

위 명령으로 Nginx 서비스의 systemd 서비스 유닛 파일을 수정하기 위한 위한 nginx.service파일을 vi 에디터 또는 nano 에디터로 열어 줍니다. 본문에서는 vi 에디터로 안내하며, 이 파일은 Nginx 서비스를 systemd로 관리하기 위한 설정이 담겨 있는 파일로 sudo 권한이 필요합니다. 여기서 ExecStartPost를 추가하고 수정함으로써 서비스 유닛을 커스터마이즈할 수 있습니다.

sleep-옵션-추가
sleep 옵션 추가

파일에서 [Service]ExcelStop 아래 다음 옵션을 추가한 뒤 :wq로 파일을 저장하고 에디터를 종료합니다.

ExecStartPost=/bin/sleep 1

ExecStartPost 옵션은 systemd 서비스 유닛에서 사용되는 옵션 중 하나입니다.

  • 이 옵션은 서비스가 시작된 후 추가 명령을 실행하는 데 사용됩니다.
  • /bin/sleep 1은 1초 동안 대기하는 명령입니다. 따라서 이 옵션을 사용하면 Nginx 서비스가 시작된 후 1초 동안 대기한 다음에 다른 동작을 수행하게 됩니다. 지연시간은 임의로 지정할 수 있지만 1초만 지연시켜도 전혀 문제가 되지 않습니다.
sudo systemctl daemon-reload

수정 후에는 Nginx 서비스를 재시작하면 새로운 설정이 적용됩니다. 이러한 설정을 통해 Nginx 서비스를 더 잘 관리하고 경쟁 문제를 해결할 수 있게 됩니다. 우선 다음 명령으로 데몬을 재로드합니다.

sudo systemctl restart nginx

이어서 nginx를 재시작합니다.

PID-오류-해결완료
PID 오류 해결완료

다시 status를 확인해 보면 정상적으로 nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argume> 오류가 사라진것을 확인할 수 있습니다.

이외에도 이런 방식으로 처리할 수 있지만 systemd의 오버라이드 파일을 생성하고 편집해야 하며, 추가적인 디렉토리와 파일이 생성되므로 관리적인 측면에서 더 복잡할 수 있습니다. 이에 반해 위 안내한 방법은 간단하고 systemd의 설정을 조정해 Nginx 서비스에 영향을 미치지 않는 추가적인 파일을 생성해서 다른 서비스나 설정에는 영향을 미치지 않으니 상황에 맞게 적용해 보시길 바랍니다.

관련 글

댓글로 남기기 어려운 내용은 Contact Form 에서 개별적으로 문의 할 수 있습니다. 해당 글과 연관 된 내용은 Copy를 이용해 현재 페이지의 주소를 복사 후 문의 폼에 입력시 보다 정확한 답을 얻을 수 있습니다.

Leave a Comment