systemctl 마스터하기: Linux 서비스 관리를 위한 필수 명령
서비스 관리는 모든 최신 Linux 배포판을 유지 관리하는 데 있어 기본이 됩니다. systemd가 채택된 이후, systemctl 명령은 시스템 및 서비스 관리자와 상호 작용하는 보편적인 도구가 되었습니다. 새로운 애플리케이션을 배포하든, 오류를 해결하든, 부팅 시 서비스가 올바르게 시작되도록 보장하든, 효율적인 시스템 관리를 위해서는 systemctl을 숙달하는 것이 필수적입니다.
이 가이드는 Linux 시스템에서 서비스의 상태, 시작 동작 및 상태를 관리하는 데 필요한 기본적인 systemctl 명령에 대한 포괄적인 개요를 제공합니다. 서비스 수명 주기를 제어하고 시스템 안정성을 보장하는 데 가장 자주 사용되는 명령들을 다룰 것입니다.
systemd와 systemctl 이해하기
systemd는 대부분의 주요 Linux 배포판(데비안, 우분투, CentOS/RHEL, 페도라 등)에서 사용되는 init 시스템이자 서비스 관리자입니다. 이는 사용자 공간을 초기화하고 프로세스, 세션 및 시스템 서비스를 관리합니다.
systemctl은 systemd 관리자와 그 구성 요소(유닛)의 상태를 제어하고 검사하는 데 사용되는 주요 명령줄 유틸리티입니다. 백그라운드에서 실행되는 프로그램(데몬)인 서비스는 서비스 유닛(service로 끝남)으로 관리됩니다.
핵심 개념: 유닛과 타겟
이 문서는 서비스에 중점을 두고 있지만, systemctl은 다양한 유닛을 관리한다는 것을 기억하십시오:
- 서비스 유닛 (
.service): 백그라운드 프로세스 관리용 (예:nginx.service). - 타겟 유닛 (
.target): 특정 시스템 상태를 나타내기 위해 유닛들을 함께 그룹화하는 용도 (예: 일반적인 서버 환경을 나타내는multi-user.target).
서비스 제어를 위한 필수 명령 (실행 상태)
이 명령들은 서비스가 현재 활성 시스템 세션에서 실행 중인지 또는 중지되었는지 여부를 직접 제어합니다.
1. 서비스 시작
부팅 구성에 관계없이 서비스를 즉시 실행하려면 start 명령을 사용하십시오.
sudo systemctl start <service_name>.service
# 예시: Apache 웹 서버 시작
sudo systemctl start apache2.service
2. 서비스 중지
실행 중인 서비스를 정상적으로 종료하려면 stop 명령을 사용하십시오.
sudo systemctl stop <service_name>.service
# 예시: MySQL 데이터베이스 서비스 중지
sudo systemctl stop mariadb.service
3. 서비스 재시작
이는 구성 파일 변경 후에 일반적으로 사용됩니다. 서비스를 중지한 다음 즉시 다시 시작합니다.
sudo systemctl restart <service_name>.service
# 예시: SSH 데몬 재시작
sudo systemctl restart sshd.service
4. 구성 다시 로드 (Reloading Configuration)
많은 서비스는 reload 작업을 지원하며, 이는 기존 연결을 방해하거나 프로세스를 완전히 중지하지 않고 새 구성 파일을 적용합니다. 이는 전체 재시작보다 빠르고 덜 방해적입니다.
sudo systemctl reload <service_name>.service
# 예시: Nginx 구성 다시 로드
sudo systemctl reload nginx.service
팁: 항상 서비스 문서를 확인하십시오. 서비스가
reload를 지원하지 않으면, 구성 변경 후에는restart를 사용하는 것이 필수적입니다.
서비스 영속성을 위한 필수 명령 (부팅 상태)
서비스를 시작하면 지금 실행되지만, 서비스를 활성화하거나 비활성화하면 시스템 부팅 시 자동으로 시작할지 여부가 제어됩니다.
1. 서비스 활성화 (Enabling a Service)
재부팅 후 서비스가 자동으로 시작되도록 하려면 해당 서비스를 활성화해야 합니다. 이렇게 하면 systemd 구성 디렉터리(/etc/systemd/system/)에 필요한 심볼릭 링크가 생성됩니다.
sudo systemctl enable <service_name>.service
# 예시: 부팅 시 PostgreSQL이 시작되도록 활성화
sudo systemctl enable postgresql.service
2. 서비스 비활성화 (Disabling a Service)
서비스가 부팅 시 자동으로 시작되는 것을 방지하려면 비활성화해야 합니다. 이렇게 하면 enable 명령으로 생성된 심볼릭 링크가 제거됩니다.
sudo systemctl disable <service_name>.service
# 예시: 서버에서 Bluetooth 서비스 비활성화
sudo systemctl disable bluetooth.service
3. 서비스 마스킹 (최후의 수단)
유닛을 마스킹하면 수동으로든, 자동으로든, 또는 다른 유닛 종속성에 의해서든 시작되는 것을 방지합니다. 이는 일반적으로 표준 disable 명령만으로는 불충분할 때 다른 것과 충돌하는 시스템 구성 요소를 영구적으로 비활성화하는 데 사용됩니다.
sudo systemctl mask <service_name>.service
# 마스킹 해제:
sudo systemctl unmask <service_name>.service
서비스 상태 및 정보 확인
서비스가 실행 중인지 여부와 실패하는 이유를 아는 것은 문제 해결에 매우 중요합니다.
1. 상태 확인
status 명령은 서비스가 활성 상태인지, 로드되었는지, 프로세스 ID는 무엇인지, 그리고 최근 로그 항목을 포함하여 서비스의 상세하고 즉각적인 스냅샷을 제공합니다.
systemctl status <service_name>.service
# 예시: 방화벽 상태 확인
systemctl status firewalld.service
출력 해석:
출력에서 세 가지 주요 라인을 확인하십시오:
- Loaded (로드됨): 유닛 파일이 올바르게 로드되었는지 여부를 보여줍니다 (예:
loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)). - Active (활성): 현재 런타임 상태를 보여줍니다 (예:
active (running)또는failed). - CGroup: 서비스와 관련된 프로세스 트리를 보여줍니다.
2. 부팅 영속성 질의
전체 상태 출력을 확인하지 않고도 서비스가 자동으로 시작하도록 구성되었는지 확인할 수 있습니다:
systemctl is-enabled <service_name>.service
# 출력은 'enabled', 'disabled', 또는 'masked'가 됩니다.
3. journalctl로 로그 보기
status는 출력의 마지막 몇 줄을 보여주지만, 심층 디버깅을 위해서는 journalctl을 사용해야 합니다. 이 명령은 모든 시스템 및 서비스 로그를 수집하는 systemd 저널에 질의합니다.
특정 서비스의 로그를 보려면:
# 마지막 재부팅 이후 해당 서비스에 대한 모든 로그 보기
journalctl -u <service_name>.service
# 실시간으로 로그 보기 (tail -f와 유사)
journalctl -u <service_name>.service -f
# 어제부터의 로그 보기
journalctl -u <service_name>.service --since "yesterday"
경고: 서비스 상태가
failed로 표시되면,journalctl -u <service> -r(역순, 최신 항목을 먼저 보여줌)이 실패를 유발한 오류 메시지를 확인하는 가장 빠른 방법인 경우가 많습니다.
시스템 상태 관리 (타겟)
systemctl은 주로 타겟을 통해 전역 시스템 상태를 관리하는 데도 사용됩니다.
1. 현재 시스템 상태 보기
시스템이 현재 어떤 타겟으로 부팅되었는지(예: 서버 환경 또는 그래픽 데스크톱) 확인하려면:
systemctl get-default
2. 기본 부팅 타겟 변경
GUI를 절대 시작해서는 안 되는 서버를 구성하는 경우, 기본 타겟을 multi-user.target으로 설정할 수 있습니다:
sudo systemctl set-default multi-user.target
3. 재부팅 및 종료
reboot 및 shutdown 명령이 여전히 작동하지만, systemctl은 이러한 작업을 수행하는 네이티브 방식을 제공합니다:
# 시스템을 즉시 재부팅
sudo systemctl reboot
# 시스템 중단 (전원 끄기)
sudo systemctl poweroff
필수 systemctl 명령 요약
| 동작 | 명령 구문 | 목적 |
|---|---|---|
| 지금 시작 | sudo systemctl start name.service |
서비스를 즉시 실행합니다. |
| 지금 중지 | sudo systemctl stop name.service |
실행 중인 서비스를 종료합니다. |
| 재시작 | sudo systemctl restart name.service |
서비스를 중지한 다음 다시 시작합니다. |
| 다시 로드 | sudo systemctl reload name.service |
(지원되는 경우) 다운타임 없이 구성 변경 사항을 적용합니다. |
| 활성화 | sudo systemctl enable name.service |
부팅 시 시작하도록 서비스를 구성합니다. |
| 비활성화 | sudo systemctl disable name.service |
부팅 시 서비스가 시작되는 것을 방지합니다. |
| 상태 | systemctl status name.service |
런타임 상태 및 최근 로그를 확인합니다. |
| 로그 보기 | journalctl -u name.service |
해당 서비스에 대한 전체 systemd 저널 기록에 접근합니다. |
systemd를 실행하는 Linux 환경 전반에서 이러한 핵심 systemctl 명령을 숙달하면 시스템 관리자가 애플리케이션의 수명 주기를 효과적으로 제어하고 안정성 및 적절한 구성 관리를 보장할 수 있습니다.