우분투 실전 명령어 | 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 문서