콘텐츠로 이동
Study Note서버 관리 일반

systemctl · journalctl 명령 참조

결론부터
systemctl은 systemctl <동작> <유닛> 한 형태가 전부고, journalctl은 필터를 겹칠수록 빨라진다 — 원리는 5·6장이, 명령 찾기는 이 페이지가 맡는다
이 장에서 처음 나오는 말4개
유닛unit
systemd가 관리하는 대상 하나. 확장자로 종류가 갈린다 — .service(데몬) · .timer(예약 실행) · .mount(마운트) 등.
drop-in
원본 유닛 파일을 건드리지 않고 일부 설정만 덮어쓰는 조각 파일. systemctl edit이 만들어 준다.
journal
systemd가 모든 로그를 모아 두는 바이너리 저장소. grep 대신 유닛·시간·심각도 필터로 질의한다.
priority
로그 심각도. emerg(0)부터 debug(7)까지 8단계 — journalctl -p err의 err가 여기의 한 단계다.

이 페이지는 명령이 목차다. “이 상황엔 뭘 치나”는 시나리오로 설명하는 systemd 장 · 로그 장 · 플레이북이 답하고, “이 명령·옵션이 뭐였더라”는 여기서 찾는다.

인자 순서는 항상 systemctl <동작> <유닛>이다. 유닛 이름의 .service는 생략할 수 있고, 상태를 바꾸는 동작에는 sudo가 필요하다. 전체 옵션은 systemctl 공식 매뉴얼에 있다.

상태 확인 — status · is-active · is-enabled

섹션 제목: “상태 확인 — status · is-active · is-enabled”
터미널 창
systemctl status nginx # 상태 + 최근 로그 10줄 ← 화면으로 볼 때
systemctl is-active nginx # active / inactive / failed 한 단어
systemctl is-enabled nginx # enabled / disabled
systemctl is-failed nginx # failed면 종료 코드 0

사람이 보는 건 status, 스크립트·조건 판정은 is-*다 — 출력이 한 단어고 종료 코드로 판정된다. status 출력의 줄별 읽는 법은 systemd 장에 있다.

켜고 끄기 — start · stop · restart · reload

섹션 제목: “켜고 끄기 — start · stop · restart · reload”
터미널 창
sudo systemctl start nginx # 지금 켠다
sudo systemctl stop nginx # 지금 끈다
sudo systemctl restart nginx # 프로세스를 내렸다 올린다 — 연결이 끊긴다
sudo systemctl reload nginx # 설정만 다시 읽는다 — 지원하는 서비스만
sudo systemctl reload-or-restart nginx # reload가 되면 reload, 아니면 restart

부팅 자동 시작 — enable · disable · mask

섹션 제목: “부팅 자동 시작 — enable · disable · mask”

start류는 지금, enable류는 다음 부팅에만 작용한다.

지금다음 부팅
start켠다영향 없음
enable영향 없음켜진다
enable --now켠다켜진다
disable --now끈다안 켜진다
mask—아예 못 뜬다 (의존성으로도)
터미널 창
sudo systemctl enable --now nginx # 대부분의 설치 마무리는 이 한 줄
sudo systemctl unmask nginx # mask 해제

목록과 검색 — list-units · list-unit-files · —failed

섹션 제목: “목록과 검색 — list-units · list-unit-files · —failed”
터미널 창
systemctl --failed # 실패한 유닛만 ← 접속 직후 습관
systemctl list-units --type=service # 지금 로드된 서비스
systemctl list-units --type=service --all # 죽어 있는 것까지
systemctl list-unit-files --state=enabled # 부팅 시 켜지도록 된 것 전부
systemctl list-timers --all # 타이머와 다음 실행 시각
systemctl list-dependencies nginx # 무엇에 의존하나

설정 보기와 고치기 — cat · show · edit · daemon-reload

섹션 제목: “설정 보기와 고치기 — cat · show · edit · daemon-reload”
터미널 창
systemctl cat nginx # 원본 + drop-in 합본 ← "설정이 왜 안 먹지"의 답
systemctl show nginx -p ExecStart -p Restart # 최종 계산된 설정값만
sudo systemctl edit nginx # drop-in 편집 (권장)
sudo systemctl edit --full nginx # 유닛 전체를 /etc로 복사해 편집
sudo systemctl daemon-reload # 유닛 파일을 바꿨으면 반드시
터미널 창
sudo systemctl reboot
sudo systemctl poweroff
sudo shutdown -r +5 "패치 재부팅" # 5분 뒤 예약 (사용자에게 공지)
sudo shutdown -c # 예약 취소

옵션은 전부 필터고, 겹칠수록 빨라진다. 수 GB 저널에서 journalctl | grep은 몇 분, 필터 조합은 즉시다. 실전 형태는 대개 이런 조합이다.

터미널 창
journalctl -u nginx -b -p err --since "1 hour ago"

전체 옵션은 journalctl 공식 매뉴얼에 있다.

어느 로그를 — -u · -k · 필드 필터

섹션 제목: “어느 로그를 — -u · -k · 필드 필터”
옵션뜻
-u nginx이 유닛의 로그만
-k커널 로그만 (= dmesg)
--user사용자 세션 유닛의 로그
_COMM=sshd프로세스 이름으로
_PID=1234PID로
_UID=1000사용자로
/usr/sbin/cron실행 파일 경로로

유닛 이름을 모를 때는 journalctl -F _SYSTEMD_UNIT으로 로그를 남긴 유닛 목록을 본다.

어느 부팅·시간대를 — -b · —since · —until

섹션 제목: “어느 부팅·시간대를 — -b · —since · —until”
터미널 창
journalctl -b # 이번 부팅 전체
journalctl -b -1 # 직전 부팅 ← 갑작스러운 재부팅 조사
journalctl --since today
journalctl --since "10 min ago"
journalctl --since "2026-08-10 09:00" --until "2026-08-10 10:00"

--since는 today · yesterday · "10 min ago" 같은 자연어와 절대 시각을 다 받는다 — 이 값 형식은 --help에 안 나오고 man 페이지에만 있다.

터미널 창
journalctl -p err -b # 이번 부팅의 err 이상만

레벨은 emerg alert crit err warning notice info debug 순서고, 지정한 레벨 이상(더 심각한 쪽) 이 모두 나온다.

어떻게 보여줄까 — -f · -n · -e · -o

섹션 제목: “어떻게 보여줄까 — -f · -n · -e · -o”
옵션뜻
-f실시간 따라가기 (tail -f)
-n 100마지막 100줄
-e페이저를 끝으로 이동해서 열기
-r최신순으로 뒤집기
-x각 줄에 설명 추가 (-xe가 실패 직후 관용구)
--no-pager페이저 없이 그대로 출력 — 스크립트·파이프용
-o short-isoISO 타임스탬프 (-o json · -o cat · -o verbose도 있다)

용량 관리 — —disk-usage · —vacuum

섹션 제목: “용량 관리 — —disk-usage · —vacuum”
터미널 창
journalctl --disk-usage # 저널이 차지한 용량
sudo journalctl --vacuum-time=14d # 14일치만 남기고 삭제
sudo journalctl --vacuum-size=500M # 500MB까지 줄인다

vacuum은 일회성 삭제다. 상한을 못 박는 영구 설정(SystemMaxUse)은 로그 장에 있다.

터미널 창
journalctl -u myapp -b --no-pager | tail -50 # 서비스가 왜 안 뜨나
journalctl -b -1 -e # 직전 부팅의 끝 — 왜 재부팅됐나
journalctl -k -b -p err # 이번 부팅의 커널 오류
journalctl -u ssh --since today | grep Accepted # 오늘 로그인 성공 기록

service — systemctl을 부르는 호환 래퍼

섹션 제목: “service — systemctl을 부르는 호환 래퍼”

옛 자료나 다른 사람의 풀이에서 만나는 service 명령은 별개 도구가 아니다.

터미널 창
service nginx status # = systemctl status nginx
service nginx start # = sudo와 함께면 systemctl start nginx
  • 인자 순서가 반대다 — service <유닛> <동작> vs systemctl <동작> <유닛>.
  • systemd 환경(Ubuntu 24.04 포함)에서는 내부적으로 systemctl로 넘겨서 실행한다. service nginx status의 출력에 Loaded: · Drop-In: 같은 systemd 정보가 나오는 이유다.
  • start stop restart status 정도만 된다. enable · daemon-reload · cat 같은 systemd 기능은 없다.

읽을 때는 같은 것으로 이해하고, 직접 칠 때는 systemctl로 통일한다 — 어차피 daemon-reload · enable에서 systemctl이 필요해진다.

터미널 창
systemctl --help | grep -i mask # 옵션 이름 확인
journalctl --help | grep -i since
man journalctl # 값 형식까지 — 안에서 /since → n → q

--help는 옵션 이름까지, man은 받는 값의 형식까지 답한다. 탭 완성도 옵션 목록을 보여 준다 — systemctl <Tab><Tab>, journalctl --<Tab><Tab>.