Linux를 사용하다 보면, “서비스 상태를 확인하고 싶다”, “실행 중인 프로세스를 목록으로 보고 싶다” 라는 상황이 많이 있습니다. 그런 때에 편리한 것이 systemctl 명령입니다. 이 명령은 Linux의 부팅 시스템 및 서비스 매니저인 “systemd”에 대응하며, 서비스(유닛)의 상태 확인, 시작, 정지, 재시작, 그리고 목록 표시 등 다양한 기능을 가지고 있습니다. 특히 “systemctl 목록”이라는 관점에서 보면, 현재 활성화된 서비스뿐만 아니라 비활성화된 서비스, 자동 시작이 설정된 것 등 다양한 각도에서 전체 구성을 파악할 수 있습니다. 이 장에서는 먼저 “systemctl이란 무엇인가”라는 기본적인 부분을 간략히 정리하고, 이 글에서 어떤 내용을 배울 수 있는지 설명합니다.
systemctl이란 무엇인가?
systemctl은 systemd 기반 Linux 배포판에서 서비스, 타깃, 마운트 포인트 등 다양한 “유닛”을 제어·확인하기 위한 표준 도구입니다. 예를 들어, Apache(httpd)나 SSH와 같은 서비스를 시작·정지하거나, 그 상태를 목록으로 표시할 때 사용됩니다.
systemd와 systemctl의 관계
systemd는 Linux의 부팅 과정 및 서비스 관리를 담당하는 핵심 메커니즘으로, 오래전부터 사용되던 “SysVinit”이나 “Upstart” 등을 대체하는 존재입니다. 이 systemd와 상호작용하기 위한 명령줄 도구가 systemctl입니다. 즉, systemd가 지휘탑이라면, systemctl은 그 명령을 내리는 “운용자”와 같은 역할을 합니다.
이 글에서 배울 수 있는 것
본 기사에서는 다음과 같은 의문에 대한 답을 얻을 수 있습니다:
현재 실행 중인 서비스 목록을 확인하려면 어떻게 해야 하나요?
비활성 서비스도 포함해서 목록을 표시하고 싶을 때는?
서비스가 자동 시작되는지 확인하고 싶을 때는?
목록 결과를 어떻게 읽어야 하나요?
Linux 초보자도 이해하기 쉽도록, 명령 실행 예시와 출력 결과 보는 방법을 자세히 설명하니, 꼭 끝까지 함께 해 주세요.
2. systemctl로 서비스 목록을 표시하는 방법
Linux의 시스템 관리에서 서비스 목록을 빠르게 파악하는 것은 매우 중요합니다. systemctl 명령을 사용하면 현재 활성 서비스는 물론 비활성 서비스, 자동 시작 설정 상황 등도 쉽게 확인할 수 있습니다. 여기서는 주로 다음 3가지 관점에서 목록 표시 방법을 설명합니다:
활성 서비스 목록
전체 서비스 목록(비활성 포함)
서비스 유닛 파일 목록(시작 설정 포함)
2.1 현재 활성 서비스 목록을 표시하는 방법
우선 가장 기본적인 사용법으로, 현재 시스템에서 “실행 중”인 서비스를 확인하고 싶을 때는 다음 명령을 사용합니다.
systemctl list-units --type=service
이 명령을 실행하면 현재 활성(=동작 중) 서비스 목록이 표시됩니다. 출력에는 다음과 같은 항목이 포함됩니다:
항목명
의미
UNIT
서비스 이름(예: ssh.service)
LOAD
유닛 파일이 로드되었는지 여부
ACTIVE
서비스가 활성인지 여부(예: active, inactive, failed)
SUB
보다 상세한 상태(예: running, exited, dead)
DESCRIPTION
서비스 개요
이 정보를 사용하면 예를 들어 “nginx가 현재 동작하고 있는지” 혹은 “무엇이 실행 중인지”와 같은 상황 파악이 가능합니다.
2.2 비활성 서비스도 포함하여 목록 표시하기
표준 list-units에서는 현재 활성 서비스만 표시됩니다는 점에 주의가 필요합니다. 비활성 서비스도 포함해서 확인하고 싶다면 --all 옵션을 추가하세요.
systemctl list-units --type=service --all
이 옵션을 추가하면 “inactive” 상태의 서비스나 과거에 한 번도 실행된 적 없는 서비스 등도 포함하여 목록화할 수 있습니다. 추가로 필터링하고 싶다면 --state= 옵션을 사용해 특정 상태만 추출할 수도 있습니다.
‘현재 어떤 상태인지’뿐만 아니라 ‘어떤 서비스가 활성화되어 있고, 시작 시 자동으로 동작하는지’를 확인하고 싶을 때는 다음 명령을 사용합니다.
systemctl list-unit-files --type=service
이 명령은 서비스의 유닛 파일(설정 정보) 목록을 표시하고, 각각의 활성/비활성 상태(enabled/disabled 등)를 확인할 수 있습니다.
STATE 값
의미
enabled
시작 시 자동으로 활성화됨
disabled
시작 시 활성화되지 않으며, 수동으로 시작해야 함
static
다른 유닛에 의존해 동작하며, 자체적으로 활성/비활성 설정을 할 수 없음
masked
명시적으로 비활성화되어 있어, 시작 자체가 불가능함(보호됨)
이 목록을 확인함으로써 “어떤 서비스가 시작 시에 올라오는지”, “실수로 마스크된 서비스가 있는지”와 같은 시스템 전체의 시작 구성을 시각적으로 파악할 수 있습니다.
3. systemctl를 사용한 서비스 관리 기본 작업
systemctl 명령은 서비스 상태를 확인할 뿐만 아니라, 시작·중지·재시작·시작 시 활성·비활성 설정 등 다양한 관리 작업을 지원합니다. 여기서는 Linux 시스템 운영에서 자주 사용되는 기본적인 작업 방법을 소개합니다. 일상적인 서버 관리 및 문제 대응에서 이러한 작업을 자유롭게 활용하는 것이 중요합니다.
3.1 서비스를 시작하기
특정 서비스를 수동으로 시작하려면, 아래와 같이 start 서브커맨드를 사용합니다.
sudo systemctl start 서비스명
예를 들어, Apache(httpd)를 시작하고 싶을 경우:
sudo systemctl start httpd.service
이 명령은 즉시 서비스를 시작하지만, 재시작 후에도 유지하려면 아래에 설명된 enable을 함께 사용해야 합니다.
3.2 서비스를 중지하기
서비스를 중지하려면, 아래 명령을 사용합니다.
sudo systemctl stop 서비스명
예:
sudo systemctl stop sshd.service
중지된 서비스는 다음에 명시적으로 start 될 때까지 동작하지 않습니다.
3.3 서비스를 재시작하기
설정 변경 후 등에 서비스를 재시작하고 싶을 때는 다음 명령이 편리합니다.
sudo systemctl restart 서비스명
예:
sudo systemctl restart nginx.service
재시작은 현재 상태와 관계없이 일단 중지 → 다시 시작 동작이 수행됩니다.
3.4 서비스 상태 확인하기
서비스의 상세 상태를 확인하려면, status 서브커맨드를 사용합니다.
systemctl status 서비스명
예:
systemctl status mysql.service
이 명령은 현재 활성 상태, 프로세스 ID(PID), 로그 요약 등을 표시하며, 트러블슈팅 시 특히 유용합니다.
3.5 서비스 자동 시작 활성화하기
서비스를 재시작 시에도 자동으로 활성화하고 싶다면, enable 서브커맨드를 사용합니다.
sudo systemctl enable 서비스명
예:
sudo systemctl enable docker.service
이 설정으로 다음 시스템 시작 시 서비스도 자동으로 시작됩니다.
3.6 서비스 자동 시작 비활성화하기
자동 시작을 해제하려면, disable 명령을 사용합니다.
sudo systemctl disable 서비스명
예:
sudo systemctl disable cups.service
이렇게 하면 시작 시 서비스가 시작되지 않게 됩니다.
3.7 자동 시작 설정 상태 확인하기
현재 해당 서비스가 활성(enabled)인지 비활성(disabled)인지 확인하려면, 아래와 같이 is-enabled을 사용합니다.
systemctl is-enabled 서비스명
출력 예:
enabled
이 결과로 서비스의 시작 정책을 빠르게 파악할 수 있습니다.
4. systemctl의 편리한 옵션과 응용 기술
systemctl 명령은 서비스의 시작 및 중지와 같은 기본 작업뿐만 아니라, 보다 고급이고 편리한 관리 작업도 지원합니다. 여기서는 약간 응용적인 기능과 알아두면 유용한 옵션을 소개합니다. 이러한 기술을 활용하면 Linux 서비스 관리를 더욱 효율화할 수 있습니다.
4.1 서비스의 의존 관계를 목록으로 표시하기
Linux에서는 특정 서비스가 다른 유닛(서비스·마운트·타깃 등)에 의존하는 경우가 흔합니다. 그 의존 관계를 확인하려면 다음과 같이 list-dependencies를 사용합니다。
systemctl list-dependencies 서비스명
예:
systemctl list-dependencies nginx.service
이 명령은 지정한 서비스와 관련된 유닛을 계층 구조로 표시합니다. 시작 순서 조사나, 특정 유닛이 간접적으로 어떤 서비스에 영향을 미치는지 분석할 때 유용합니다.
4.2 유닛 파일의 내용을 표시하기
서비스의 상세 설정을 확인하고 싶을 경우, 직접 유닛 파일(.service 파일)의 내용을 확인하는 것도 가능합니다。
systemctl cat 서비스명
예:
systemctl cat ssh.service
이 명령은 실제로 읽혀진 유닛 파일의 경로와 내용을 표시합니다. 커스터마이즈 되었는지 여부와 어떤 설정이 적용되었는지를 빠르게 확인할 수 있습니다.
4.3 유닛 파일을 리로드하기
유닛 파일을 수동으로 수정한 후, systemctl에 반영하려면 daemon-reload를 실행합니다。
sudo systemctl daemon-reexec
또는, 보다 일반적으로는:
sudo systemctl daemon-reload
이 작업을 통해 systemd는 유닛 파일을 다시 읽어들여 이후 작업에 반영됩니다. 설정 파일을 변경했는데 반영되지 않는다고 느낄 때는 먼저 이 명령을 시도해 보는 것이 좋습니다.
4.4 유닛의 실행 로그 확인하기(보충)
참고로, systemctl 자체는 아니지만, 서비스 로그를 확인하려면 journalctl 명령이 편리합니다。
journalctl -u 서비스명
예:
journalctl -u docker.service
서비스 시작 시 오류나 재시작 기록 등을 확인할 수 있어, 트러블슈팅의 첫 단계로 반드시 알아두어야 할 명령입니다.
5. 자주 발생하는 문제와 그 해결 방법
systemctl을 사용하여 서비스를 관리하면, 예상대로 동작하지 않거나 오류 메시지가 표시되는 경우가 있습니다. 이 장에서는 자주 발생하는 문제와 그 해결 방법을 이해하기 쉽게 설명합니다。 ‘서비스가 시작되지 않는다’, ‘상태를 확인해도 원인을 알 수 없다’와 같은 상황에서도 당황하지 않고 대응할 수 있도록, 최소한으로 알아두면 좋은 포인트를 소개합니다。
5.1 서비스가 시작되지 않을 때 확인 포인트
서비스를 시작하려고 해도, 다음과 같은 오류가 발생할 수 있습니다:
Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.
이러한 경우, 아래 순서대로 확인하면 원인을 파악하기 쉬워집니다:
상태 확인
systemctl status 서비스명
오류 로그 확인
journalctl -xe
유닛 파일 재로드 유닛 파일을 변경한 직후 등에는, 아래를 실행하여 재로드합시다。
sudo systemctl daemon-reload
포트 충돌 확인 이미 다른 프로세스가 같은 포트를 사용하고 있지 않은지, 아래에서 확인할 수 있습니다。
sudo netstat -tulnp | grep 포트번호
5.2 status 명령어에서 오류 메시지 읽는 방법
systemctl status를 실행하면, 서비스의 상태뿐만 아니라 마지막에 출력된 로그 메시지도 함께 표시됩니다. 예를 들어:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
Active: failed (Result: exit-code) since Fri 2025-04-18 12:00:00 JST; 5s ago
Process: 12345 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=1/FAILURE)
이와 같이, “Active: failed”, “status=1/FAILURE” 등의 기재를 보면, 서비스가 실패했음과 어떤 프로세스가 오류를 반환했는지를 한눈에 알 수 있습니다。 또한, Loaded 행에서 유닛 파일의 경로도 확인할 수 있어, 파일의 편집 대상도 바로 파악할 수 있습니다。
5.3 서비스가 자동으로 중지되는 경우
서비스가 한 번은 시작되었지만 곧 중단되는 경우는, 주로 다음 원인들이 고려됩니다:
설정 파일의 오기
포트 충돌
필수 파일 및 디렉터리 누락
실행 권한 부족
이러한 경우에는, 다음과 같은 대응이 유효합니다:
설정 파일을 재확인하고, nginx -t 및 apachectl configtest와 같은 도구로 검증
journalctl -u 서비스명 로 상세 로그를 추적
필요한 디렉터리(예: /var/run/xxx)가 존재하는지 확인하고, 없으면 생성
5.4 masked 상태에서 시작할 수 없을 때
systemctl start를 실행해도, 다음과 같은 오류가 발생하는 경우:
Failed to start example.service: Unit example.service is masked.
이는 서비스가 masked 상태(완전히 비활성화된 상태)이며, 시작이 차단되고 있기 때문입니다. 이를 해제하려면, 다음과 같이 unmask를 실행합니다。
sudo systemctl unmask 서비스명
그 후, start로 시작할 수 있습니다。
6. 요약
Linux에서의 서비스 관리는 일상적인 시스템 운영에 필수적인 작업 중 하나입니다. 그 중심적인 역할을 담당하는 것이 systemctl 명령이며, “목록 표시”와 “서비스 조작”을 통해 시스템 전체의 상태를 파악·제어할 수 있습니다. 이 기사에서는 “systemctl 목록”을 키워드로, 아래의 포인트들을 자세히 설명했습니다:
systemctl 명령으로 할 수 있는 일 (복습)
서비스 목록 확인
현재 활성 서비스 표시(list-units --type=service)
비활성 서비스도 포함한 목록(--all 및 --state= 옵션)
서비스 유닛 파일 목록 및 시작 설정(list-unit-files)
서비스 조작 기본
시작·정지·재시작·상태 확인 (start / stop / restart / status)
자동 시작 설정 (enable / disable / is-enabled)
응용 조작 및 문제 해결
의존 관계 확인, 유닛 파일 표시, 설정 재로드
오류 시 로그 조사와 상태 확인을 통한 원인 파악
서비스 관리 베스트 프랙티스
상태를 확인한 후에 조작한다 (반드시 status를 본다)
자동 시작 여부를 파악한다 (is-enabled로 확인)
설정 변경 후 반드시 daemon-reload를 실행한다
문제 발생 시 journalctl로 로그를 확인한다
Linux 운영에서, 이러한 꾸준한 확인 작업의 누적이 안정적인 서비스 제공과 장애 대응 속도 향상에 기여합니다.
추가 학습을 위해
이 기사를 읽고 “더 깊게 배우고 싶다”고 느낀 분은 아래와 같은 주제로 진행해도 좋습니다:
systemd 타깃 (runlevel과의 차이)
타이머 (systemd-timer)를 이용한 정기 실행 설정
커스텀 유닛 파일 생성 및 배치 방법
7. 자주 묻는 질문(FAQ)
여기에서는 systemctl 명령과 서비스 목록에 관해 독자들로부터 자주 제기되는 질문과 그 답변을 정리했습니다. 기본 작업에 익숙해진 분들도 확인용으로 참고해 주세요.
Q1. systemctl와 service 명령은 어떻게 다른가요?
A1.systemctl은 systemd 기반의 서비스 관리 명령이며, 현대의 많은 Linux 배포판(Ubuntu, CentOS, Fedora 등)에서 표준으로 채택되고 있습니다。
반면, service는 기존 SysVinit 시스템에서 사용되던 명령입니다. 호환성을 위해 남아 있는 경우도 있지만, systemd 환경에서는 systemctl을 사용하는 것이 권장됩니다。
Q2. list-units와 list-unit-files의 차이는?
A2.
list-units는 현재 로드된 유닛(= 실행 중이거나 과거에 사용된 유닛)을 표시합니다。
list-unit-files는 모든 유닛 파일과 그 활성화 상태(enabled / disabled 등)를 목록으로 표시합니다。
즉, “현재 실행 중인 것”과 “설정상 어떻게 되어 있는지”를 구분해서 사용하는 이미지입니다。
Q3. static 상태의 서비스는 시작할 수 있나요?
A3. 네, static 상태의 서비스도 수동으로 start하면 시작할 수 있습니다. 하지만 enable을 해서 부팅 시 자동 실행하도록 할 수는 없습니다。
이는 static 서비스가 다른 유닛에 의존하여 시작되도록 설계되어 있기 때문입니다。
Q4. masked 상태인 서비스가 시작되지 않습니다. 어떻게 해야 하나요?
A4.masked 상태는 “완전히 비활성화된” 상태이며, 시작 자체가 차단됩니다. 먼저 아래 명령으로 마스크를 해제하십시오:
sudo systemctl unmask 서비스명
그 후, start로 시작할 수 있습니다。
Q5. GUI에서 서비스 상태를 목록으로 표시하는 방법이 있나요?
A5. 배포판에 따라서는 gnome-system-monitor, KSysGuard, Cockpit 등 도구를 통해 GUI에서 서비스 상태를 확인할 수 있는 경우도 있습니다。
하지만 서비스의 활성/비활성 전환 등 고급 작업은 systemctl을 사용하는 것이 가장 확실합니다。
Q6. 유닛 파일을 직접 만들고 싶은데, 어디에 두어야 하나요?
A6. 일반적으로 /etc/systemd/system/에 배치합니다. 편집 후에는 아래를 잊지 말고 실행하십시오: