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를 읽게 됩니다.

Windows에서 PuTTY 설치하는 방법

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