1. 명령행 인터페이스(6) - 서비스 관리하기

프라이마리모·2026년 4월 11일
post-thumbnail

부팅부터 시작해서 전체 시스템을 관리하는 systemd 도구를 소개한다.
명령행에서 systemd를 다루는 systemctl 명령으로 시스템 서비스를 어떻게 제어하는 지 확인해본다.

systemd : 시스템 관리자

부팅 과정부터 다시 되새겨보자.

  • BIOS/UEFI가 파티션 정보를 읽고 부트로더 GRUP를 실행한다.
  • GRUB는 저장장치에서 커널을 찾아 메모리에 올리고 시스템 제어 권한을 커널에 넘긴다.
  • 커널은 시스템 초기화 이미지인 initrd를 메모리에 마운트한다.
    (initrd에는 장치드라이버를 비롯한 시스템 초기화 도구들이 들어있다.)
  • 커널은 필요한 도구를 실행하고 저장 장치의 진짜 루트 파일 시스템을 마운트한다.
  • 리눅스 커널은 모든 프로세스의 부모 역할을 하는 PID 1번 프로세스 init을 실행한다.
    • init은 사용자가 시스템을 사용할 수 있는 환경을 만들어준다. (시스템초기화)
    • ps 1로 1번 프로세스 systemd를 확인할 수 있다.

시스템 관리자 systemd는 부팅 프로세스만 처리하지 않고 시스템을 전반적으로 관리하는 만능 도구로 개발되었다.


systemctl [옵션][명령] : systemd 관리

systemctl로 시스템 상태 조회

systemctl list-units는 유형별 유닛 목록과 상태를 화면에 표시한다.
옵션이나 추가 명령 없이 systemctl 을 실행한 결과와 동일하나, moreless 처럼 up/down 버튼으로 화면 스크롤이 가능하다. q를 누르면 스크롤을 종료하고 명령 프롬프트로 돌아온다.

  • UNIT : 유닛 이름. 유니 ㅅ 이름 뒤에 붙는 접미사(automount, device, service 등)로 어떤 유형의 유닛인지 짐작 가능
  • LOAD : systemd가 유닛 설정 파일을 정상적으로 읽어들였는지 확인
  • ACTIVE : 유닛이 동작하고 있는지 여부
  • SUB : 유닛이 활성(active) 상태라면 추가 상태 정보 표기
  • DESCRIPTION : 유닛에 대한 세부 설명

-t 옵션 추가 시 유닛 유형에 따라 결과를 필터링 할 수 있다.

target은 부팅 과정에서 활성화 할 유닛을 결정하는 유닛이다.
systemctl list-dependencies 는 의존 관계에 있는 유닛을 보여준다.

systemctl get-default는 현재 기본 target을 보여준다.

systemd의 default.target은 graphical.target의 심볼릭링크이다.

명령 인자 없이 systemctl list-dependencies를 실행하면 기본 target과 관련된 유닛 목록을 보여준다. target 유닛을 기준으로 살펴보면 systemd가 부팅 과정에서 시스템을 초기화하고자 어떤 일을 처리하는지 유추할 수 있다.

systemctl로 서비스 제어하기

status는 서비스 상태를 보여주는 명령이다.
status 로 조회 시 순서대로 서비스 이름과 설명, 서비스 유닛 설정파일 상태, 서비스 활성화 여부, 프로세스 정보, 서비스 실행과정에서 발생한 로그가 화면에 표시된다.

is-active 로 서비스가 현재 활성화 상태인지 확인할 수 있다.
is-enabled로 부팅과정에서 자동 활성화 되는지 여부를 확인할 수 있다.

stop 명령으로 서비스를 중지할 수 있다. 시스템 상태를 변경하므로 sudo가 필요하다.
중지 후 상태를 확인해보면 inactive로 상태가 변경된 것을 확인해 볼 수 있다.

그 외 상태를 변경하는 명령은 다음과 같다.

명령설명
start서비스 시작
restart서비스 재시작
disabled부팅 과정에서 서비스 자동 활성화 해제
enabled부팅 과정에서 서비스 자동 활성화 설정

journalctl : systemd 로그 정보 조회

systemctl status 로 확인할 수 있는 로그 정보는 systemd-journald가 제공한다. systemd-journald는 부팅부터 발생하는 systemd의 로그 정보를 이진 자료로 저장하므로, journalctl 명령으로만 확인할 수 있다.

-u(--unit) 옵션으로 특정 유닛에 대한 로그 정보를 조회 할 수 있다. 로그 정보는 less로 화면에 출력된다.

-e(--pager-end) 옵션으로 최근 로그정보부터 화면 스크롤을 시작할 수 있다. -u 옵션과 함께 사용이 가능하다.

-p(--priority) 옵션으로 로그 정보를 중요도에 따라 필터링이 가능하다.

로그수준설명
emerg응급
alert경고
crit심각
err오류
warning주의
notice알림
info의미있는 정보
debug디버그 정보

예를 들어 다음 명령은 장치 설정 과정에서 발생한 오류를 찾아내고자 systemd-udevd의 오류 로그만 조회한다.

-S(--since)-U(--until) 옵션 사용 시 날짜나 시간을 기준으로 로그 필터링이 가능하다. 혼용 또한 가능하다.
연-월-일 시:분:초 형식으로 입력하며, 시간이 생략되면 00:00:00 이 기준이 된다.
날짜대신 yesterday, today, tomorrow를 입력하여 어제, 오늘, 내일을 지정할 수도 있다.

profile
개발공부 요약노트

0개의 댓글