우분투 실전 명령어 | systemd failed 서비스 장애 진단

언제 쓰는가

서비스가 갑자기 죽거나 failed 상태로 멈췄을 때, 어디서부터 봐야 할지 막막할 때 쓰는 흐름입니다. systemctl status로 현재 상태를 빠르게 잡고, journalctl로 원인을 좁힌 뒤, 재시작 정책과 유닛 파일까지 확인하면 재발 방지까지 한 번에 정리할 수 있습니다.

바로 쓰는 명령어

# 1) 실패한 서비스 목록 확인
systemctl --failed --type=service

# 2) 특정 서비스 상태와 최근 로그 요약
sudo systemctl status nginx --no-pager -l

# 3) 부팅 이후 해당 서비스 로그 전체 확인
sudo journalctl -u nginx -b --no-pager
# 4) 최근 30분 로그만 추려서 원인 파악
sudo journalctl -u nginx --since "30 min ago" --no-pager

# 5) 실패 카운터 리셋 후 재시작
sudo systemctl reset-failed nginx
sudo systemctl restart nginx

# 6) 자동 재시작 정책 확인
systemctl show nginx -p Restart -p RestartSec -p StartLimitBurst -p StartLimitIntervalSec

핵심 옵션 패턴

  • -u <service>: 특정 서비스 로그만 필터링합니다.
  • -b: 현재 부팅 기준으로 잘라서 봅니다. 재부팅 이후 문제만 볼 때 유용합니다.
  • --since "30 min ago": 장애 시점 전후를 짧게 압축해 확인할 때 좋습니다.
  • --no-pager -l: 출력이 less에 걸리지 않고 긴 줄도 잘리지 않아 복붙 분석이 편합니다.
  • reset-failed: start-limit에 걸린 서비스는 이걸 먼저 해야 재시작이 정상 동작하는 경우가 많습니다.

명령 출력 예시

$ systemctl --failed --type=service
  UNIT          LOAD   ACTIVE SUB    DESCRIPTION
● nginx.service loaded failed failed A high performance web server

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state.
SUB    = The low-level unit activation state.
1 loaded units listed.
$ sudo systemctl status nginx --no-pager -l
× nginx.service - A high performance web server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: failed (Result: exit-code) since Wed 2026-02-18 22:41:03 KST; 2min ago
    Process: 21433 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=1/FAILURE)

Feb 18 22:41:03 ubuntu nginx[21433]: nginx: [emerg] duplicate location "/api" in /etc/nginx/sites-enabled/default:47
Feb 18 22:41:03 ubuntu systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE

자주 하는 실수

  • restart만 반복하고 로그를 안 보는 실수: 원인 없이 재기동만 하면 장애가 다시 납니다.
  • start-limit-hit 상태를 모르고 계속 start하는 실수: reset-failed 없이 복구가 안 될 수 있습니다.
  • 오래된 부팅 로그와 현재 장애를 섞어 보는 실수: -b, --since를 함께 써서 시간 범위를 좁히세요.

검증 방법

# 서비스 상태 정상 여부
systemctl is-active nginx && systemctl is-enabled nginx

# 에러 레벨 로그 재확인
sudo journalctl -u nginx -p err --since "10 min ago" --no-pager

# 실패 상태 재발 여부
systemctl --failed --type=service

운영 팁

운영 중인 서비스는 재시작 전에 설정 검증 명령(예: nginx -t, sshd -t, named-checkconf)을 먼저 넣는 습관이 좋습니다. 그리고 장애 직후에는 journalctl -u <service> -o short-iso로 타임스탬프를 통일해 두면 팀 단위 원인 분석이 훨씬 빨라집니다.

출처

  • Ubuntu Manpage: systemctl
  • Ubuntu Manpage: journalctl
  • freedesktop.org systemd 문서