"오늘의 문제를, 내일의 기록으로 남깁니다."

막연한 이론보다, 구체적인 코드가 필요할 때. 직접 겪고 해결한 문제들을 기록합니다. 실무에서 부딪히는 진짜 이슈와, 내가 이해한 방식 그대로 정리한 가이드입니다.

웹개발/서버 운영 & 인프라

리눅스에서 crontab으로 서비스 자동 재시작 설정하는 방법 (실무 예제 포함)

자바를잡아 2025. 8. 1. 08:00
반응형

리눅스에서 crontab으로 서비스 자동 재시작 설정하는 방법 (실무 예제 포함)

운영 서버에서 간헐적으로 죽는 프로세스, 갑자기 중단되는 백그라운드 작업, 잘 안 살아나는 Node.js 앱... 이런 경우, 서버 담당자는 꼭 묻습니다.
“죽으면 자동으로 다시 올라오게 못 하나요?”

물론 가능합니다. 가장 간단한 방법이 바로 리눅스 crontab을 활용한 자동 재시작 구성입니다.

이번 글에서는 crontab을 이용해 리눅스 서버에서 특정 서비스나 스크립트를 정기적으로 모니터링하고, 꺼져 있으면 자동으로 재시작하는 방식을 단계별로 안내합니다. 실무에서 바로 쓸 수 있는 명령어와 스크립트 예제도 함께 드립니다.

1. crontab이란?

crontab은 리눅스의 대표적인 스케줄러입니다. 특정 시간마다 명령어를 실행하도록 설정할 수 있고, 시스템 관리 자동화에서 거의 필수로 사용됩니다.

명령어:

crontab -e   # 사용자별 크론 편집
crontab -l   # 등록된 크론 목록 확인

2. 자동 재시작이 필요한 상황

  • 서비스가 간헐적으로 죽는 경우 (예: spring boot, nginx, node)
  • 스크립트가 백그라운드에서 돌고 있어야 하는 경우 (예: python 작업)
  • 갑작스러운 메모리 부족으로 죽었을 때 자동 복구

3. 서비스 상태 확인 및 재시작 쉘 스크립트 만들기

예시로 nginx 서비스를 감시한다고 가정해 보겠습니다.


#!/bin/bash

SERVICE_NAME="nginx"
if ! systemctl is-active --quiet $SERVICE_NAME; then
  echo "$(date) - $SERVICE_NAME not running. restarting..." >> /var/log/restart.log
  systemctl restart $SERVICE_NAME
fi

이 스크립트를 예를 들어 /usr/local/bin/check_nginx.sh 로 저장하고 실행 권한을 부여합니다.

chmod +x /usr/local/bin/check_nginx.sh

4. crontab에 등록하기 (매 5분마다 감시)

crontab -e

편집기에서 아래 내용을 추가합니다:

*/5 * * * * /usr/local/bin/check_nginx.sh

이렇게 하면 5분마다 nginx가 실행 중인지 확인하고, 꺼져 있으면 자동으로 다시 실행됩니다.

🔒 Tip. 로그 관리까지 하고 싶다면?

*/5 * * * * /usr/local/bin/check_nginx.sh >> /var/log/check_nginx.log 2>&1

표준 출력과 에러 출력을 모두 로그로 남길 수 있습니다.

5. systemctl 서비스 대신 단독 스크립트 실행 감시

예: Node.js 앱을 직접 node app.js로 실행했다면 PID를 추적하기 어렵습니다. 이런 경우 pgrep 명령을 활용하면 됩니다.


#!/bin/bash

APP_NAME="app.js"
PROCESS=$(pgrep -f $APP_NAME)

if [ -z "$PROCESS" ]; then
  echo "$(date) - $APP_NAME not running. restarting..." >> /var/log/restart.log
  nohup node /home/ubuntu/app/app.js &
fi

6. crontab 등록 상태 확인 및 제거

등록된 모든 크론 목록 보기:

crontab -l

모든 크론 삭제:

crontab -r

특정 크론만 지우고 싶다면 crontab -e로 편집하여 해당 줄만 삭제하면 됩니다.

7. 주의사항

  • 스크립트에 절대경로를 사용하세요. (crontab은 $PATH가 제한적)
  • 로그 남기기를 습관화하세요. 원인 분석에 도움이 됩니다.
  • crontab은 매초 단위 실행이 불가합니다. 최소 단위는 1분입니다.
  • root 사용자로 crontab을 설정할 경우 더 넓은 권한으로 서비스 재시작이 가능하지만, 주의해서 다뤄야 합니다.

마무리

간단하지만 강력한 crontab은 서버 운영의 버팀목이 됩니다.
서버에서 서비스가 죽었을 때 자동으로 살아나도록 구성해두면 예기치 못한 장애에 대응할 수 있고, 매번 수동으로 확인하고 조치할 필요도 없어집니다.

이번 포스팅에서 제공한 스크립트는 그대로 실무에 적용 가능한 수준이니 꼭 테스트 서버에 먼저 적용해보고 운영에 반영해 보시기 바랍니다.

반응형