← 전체 글로 돌아가기

서버 운영

서버를 재부팅한 후 서비스가 정말 다시 떴는지 확인하기

재부팅 후 자동 시작 설정이 제대로 작동했는지 확인하지 않으면, 한 시간 뒤에 서비스가 내려간 줄도 모르고 있을 수 있다.

서버를 유지보수하기 위해 재부팅해야 할 때가 있다. 커널 업데이트, 보안 패치, 물리적 점검 등의 이유로. 문제는 재부팅 후다.

systemd와 자동 시작 설정

Linux 서버의 대부분은 systemd를 사용한다. 서비스가 자동으로 시작되도록 설정하는 방법은 간단하다.

# 서비스를 자동 시작하도록 설정
sudo systemctl enable my-service

# 현재 자동 시작 상태 확인
sudo systemctl is-enabled my-service
# 출력: enabled 또는 disabled

재부팅 후 확인 절차

서버를 재부팅한 후에는 다음을 꼭 확인해야 한다.

# 1. 서비스가 실행 중인가?
sudo systemctl status my-service

# 2. 프로세스가 정말 떠 있는가?
ps aux | grep my-service

# 3. 포트가 열려 있는가? (예: 포트 3000)
sudo ss -lntp | grep 3000

# 4. 네트워크 응답을 하는가?
curl http://localhost:3000 || curl http://your-server:3000

문제를 찾기 위한 로그 확인

서비스가 시작되지 않은 이유를 로그에서 찾을 수 있다.

# 서비스 로그 확인
sudo journalctl -u my-service -n 50

# 또는 실시간으로 보기
sudo journalctl -u my-service -f

# 시스템 전체 로그
sudo journalctl -n 100

흔한 문제들

1. 환경 변수 미설정

재부팅 후 셸 환경이 초기화되므로, 서비스 설정 파일에서 환경 변수를 명시해야 한다.

# /etc/systemd/system/my-service.service
[Service]
Environment="NODE_ENV=production"
Environment="DATABASE_URL=postgresql://..."
ExecStart=/usr/bin/node /opt/app/index.js

2. 파일 권한 문제

로컬에서는 root로 실행했는데, 서비스는 특정 사용자로 실행될 수 있다.

# 파일 소유권 확인
ls -la /opt/app/

# 필요하면 권한 변경
sudo chown -R app-user:app-user /opt/app/

3. 포트가 이미 사용 중

이전 인스턴스가 제대로 종료되지 않았거나, 다른 서비스가 포트를 사용 중일 수 있다.

sudo lsof -i :3000  # 또는
sudo ss -lntp | grep 3000

배포 후 체크리스트

  • 서비스 상태 확인 (enabled인가?)
  • 프로세스 실행 중인가?
  • 포트가 열려 있는가?
  • 실제로 응답하는가?
  • 로그에 에러가 없는가?
  • 주요 기능을 몇 가지 테스트했는가?

재부팅은 한 시간, 하루가 아니라 몇 주 뒤에 문제를 드러낼 수 있다. 지금 5분 투자해서 확인하는 것이 나중의 밤샘을 막는다.