systemctl · journalctl 명령 참조
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
섹션 제목: “systemctl”인자 순서는 항상 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 / disabledsystemctl 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 # 유닛 파일을 바꿨으면 반드시전원 — reboot · poweroff
섹션 제목: “전원 — reboot · poweroff”sudo systemctl rebootsudo systemctl poweroffsudo shutdown -r +5 "패치 재부팅" # 5분 뒤 예약 (사용자에게 공지)sudo shutdown -c # 예약 취소journalctl
섹션 제목: “journalctl”옵션은 전부 필터고, 겹칠수록 빨라진다. 수 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=1234 | PID로 |
_UID=1000 | 사용자로 |
/usr/sbin/cron | 실행 파일 경로로 |
유닛 이름을 모를 때는 journalctl -F _SYSTEMD_UNIT으로 로그를 남긴 유닛 목록을 본다.
어느 부팅·시간대를 — -b · —since · —until
섹션 제목: “어느 부팅·시간대를 — -b · —since · —until”journalctl -b # 이번 부팅 전체journalctl -b -1 # 직전 부팅 ← 갑작스러운 재부팅 조사journalctl --since todayjournalctl --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 페이지에만 있다.
얼마나 심각한 것만 — -p
섹션 제목: “얼마나 심각한 것만 — -p”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-iso | ISO 타임스탬프 (-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 nginxservice nginx start # = sudo와 함께면 systemctl start nginx- 인자 순서가 반대다 —
service <유닛> <동작>vssystemctl <동작> <유닛>. - systemd 환경(Ubuntu 24.04 포함)에서는 내부적으로 systemctl로 넘겨서 실행한다.
service nginx status의 출력에Loaded:·Drop-In:같은 systemd 정보가 나오는 이유다. startstoprestartstatus정도만 된다.enable·daemon-reload·cat같은 systemd 기능은 없다.
읽을 때는 같은 것으로 이해하고, 직접 칠 때는 systemctl로 통일한다 —
어차피 daemon-reload · enable에서 systemctl이 필요해진다.
옵션이 생각 안 날 때
섹션 제목: “옵션이 생각 안 날 때”systemctl --help | grep -i mask # 옵션 이름 확인journalctl --help | grep -i sinceman journalctl # 값 형식까지 — 안에서 /since → n → q--help는 옵션 이름까지, man은 받는 값의 형식까지 답한다. 탭 완성도 옵션 목록을 보여 준다 —
systemctl <Tab><Tab>, journalctl --<Tab><Tab>.