소개
최근 몇 년 동안 Linux 배포판은 다른 init 시스템에서 systemd
로 점점 전환되고 있습니다. systemd
도구 모음은 부팅 이후부터 전체 시스템을 관리하기 위한 빠르고 유연한 init 모델을 제공합니다.
이 가이드에서는 systemd
를 사용하는 서버를 관리하는 데 알아야 할 가장 중요한 명령어를 간단하게 소개해드립니다. 이 명령어들은 systemd
를 구현한 모든 서버(우분투 15.04 이상, 데비안 8, CentOS 7, Fedora 15 이상의 모든 OS 버전)에서 작동해야 합니다. 시작해 봅시다.
기본 단위 관리
systemd
가 관리하고 조작하는 기본 객체는 “unit”입니다. 유닛은 여러 유형일 수 있지만 가장 일반적인 유형은 “service”입니다(유닛 파일이 .service
로 끝납니다). systemd
를 사용하는 서버에서 서비스를 관리하기 위한 주요 도구는 systemctl
명령입니다.
모든 일반 init 시스템 명령에는 systemctl
명령과 동등한 작업이 있습니다. 우리는 이를 설명하기 위해 nginx.service
유닛을 사용할 것입니다(이 서비스 파일을 얻으려면 패키지 관리자로 Nginx를 설치해야 합니다).
예를 들어, 서비스를 시작하려면 다음을 입력할 수 있습니다:
우리는 다시 멈출 수 있습니다. 입력하여:
서비스를 다시 시작하려면 다음을 입력할 수 있습니다:
정상 기능을 방해하지 않고 서비스를 다시로드하려면 다음을 입력할 수 있습니다:
단위 활성화 또는 비활성화
기본적으로 대부분의 systemd
단위 파일은 부팅 시 자동으로 시작되지 않습니다. 이 기능을 구성하려면 해당 단위를 “활성화”해야 합니다. 이렇게 하면 특정 부팅 “대상”에 연결되어 해당 대상이 시작될 때 트리거됩니다.
서비스를 부팅 시 자동으로 시작하도록 설정하려면 다음을 입력하세요:
다시 서비스를 비활성화하려면 다음을 입력하세요:
시스템 상태 개요 얻기
systemd
서버에서 시스템 상태 개요를 얻을 수 있는 많은 정보가 있습니다.
예를 들어, systemd
가 “활성”으로 표시한 모든 단위 파일을 가져오려면 (실제로 list-units
를 생략할 수 있습니다. 이것은 기본 systemctl
동작입니다):
systemd
가 메모리에 로드하거나 시도한 모든 유닛을 나열하려면 현재 활성 상태가 아닌 것도 포함하여 --all
스위치를 추가하십시오:
시스템에 설치된 모든 유닛을 나열하려면 systemd
가 메모리에로드 시도하지 않은 것도 포함하여 다음을 입력하십시오:
기본 로그 정보보기
A systemd
component called journald
collects and manages journal entries from all parts of the system. This is basically log information from applications and the kernel.
가장 오래된 항목부터 모든 로그 항목을보려면 다음을 입력하십시오:
journald
가 이전 부팅 기록을 저장하도록 구성된 경우 기본적으로 이전 및 현재 부팅에서 항목을 표시합니다. 일부 배포판은 기본적으로이를 활성화하고 다른 배포판은 그렇지 않습니다(이를 활성화하려면 /etc/systemd/journald.conf
파일을 편집하여 Storage=
옵션을 “persistent”로 설정하거나 sudo mkdir -p /var/log/journal
을 입력하여 지속적인 디렉토리를 생성하십시오).
현재 부팅에서 로그 항목만 보려면 -b
플래그를 추가하십시오:
일반적으로 dmesg
로 표시되는 커널 메시지 만 보려면 -k
플래그를 사용할 수 있습니다:
다시 말하지만, 현재 부팅에만 -b
플래그를 추가하여이를 제한할 수 있습니다:
Unit States 및 로그 조회
위의 명령어는 일반 시스템 상태에 대한 액세스를 제공했지만, 개별 단위의 상태에 대한 정보도 얻을 수 있습니다.
단위의 현재 상태 개요를 보려면 systemctl
명령어와 함께 status
옵션을 사용할 수 있습니다. 이렇게 하면 단위가 활성화되었는지, 프로세스에 관한 정보 및 최신 저널 항목이 표시됩니다:
해당 단위에 대한 모든 저널 항목을 보려면 journalctl
명령에 단위 이름과 함께 -u
옵션을 지정하십시오:
항상처럼, -b
플래그를 추가하여 현재 부팅에 대한 항목을 제한할 수 있습니다:
단위 및 단위 파일 검사
지금까지 단위를 시작하거나 중지하여 단위의 상태를 수정하는 방법을 알았으며, 프로세스의 상황을 파악하기 위해 상태 및 저널 정보를 보는 방법도 알았습니다. 그러나 아직 단위 및 단위 파일의 다른 측면을 검사하는 방법을 보지 않았습니다.
A unit file contains the parameters that systemd
uses to manage and run a unit. To see the full contents of a unit file, type:
단위의 의존성 트리(단위를 시작할 때 systemd
가 활성화하려고 하는 단위)를 보려면 다음을 입력하십시오:
이는 종속 단위를 표시하며 target
단위가 재귀적으로 확장됩니다. 모든 종속 단위를 재귀적으로 확장하려면 --all
플래그를 전달하세요.
마지막으로 시스템에서 단위의 설정의 저수준 세부 정보를 보려면 show
옵션을 사용할 수 있습니다.
이를 통해 systemd
에서 관리되는 각 매개변수의 값을 얻을 수 있습니다.
단위 파일 수정
단위 파일을 수정해야 하는 경우 systemd
는 실제 디스크 위치로 이동할 필요 없이 systemctl
명령 자체에서 변경 사항을 만들 수 있도록 허용합니다.
기본 단위 파일의 설정을 추가하거나 재정의할 수 있는 단위 파일 스니펫을 추가하려면 단위에 edit
옵션을 호출하세요.
스니펫을 만드는 대신 단위 파일의 전체 내용을 수정하려면 --full
플래그를 전달하세요.
단위 파일을 수정한 후에는 변경 사항을 반영하기 위해 systemd
프로세스 자체를 다시 로드해야 합니다.
타겟 사용 (런레벨)
이닛 시스템의 다른 기능 중 하나는 서버 자체를 서로 다른 상태로 전환하는 것입니다. 전통적인 이닛 시스템은 일반적으로 이를 “런레벨”이라고 하며, 시스템은 한 번에 하나의 런레벨에만 있을 수 있습니다.
systemd
에서는 대신 “타겟”을 사용합니다. 타겟은 기본적으로 서버를 특정 상태로 전환하는 데 사용되는 동기화 지점입니다. 서비스 및 기타 유닛 파일은 타겟에 묶일 수 있으며 여러 타겟이 동시에 활성화될 수 있습니다.
시스템에서 사용 가능한 모든 타겟을 보려면 다음을 입력하십시오:
부팅 시 systemd
가 도달하려고 시도하는 기본 타겟을 보려면(이 타겟의 종속성 트리를 구성하는 모든 유닛 파일을 시작함), 다음을 입력하십시오:
부팅 시 사용할 기본 타겟을 변경하려면 set-default
옵션을 사용할 수 있습니다:
특정 타겟에 묶인 유닛을 확인하려면 다음을 입력할 수 있습니다:
시스템 상태를 변경하여 타겟 간 전환을 수행할 수 있습니다. 이렇게 하면 지정된 타겟에 묶이지 않은 모든 유닛이 중지됩니다. 중요한 서비스가 중지되지 않도록 주의하십시오:
서버 중지 또는 재부팅
시스템이 전환할 수 있는 주요 상태 중 일부에 대해 바로 가기가 제공됩니다. 예를 들어, 서버를 종료하려면 다음을 입력할 수 있습니다:
시스템을 다시 부팅하려면 다음을 입력하면 됩니다:
구조 복구 모드로 부팅하려면 다음을 입력하세요:
대부분의 운영 체제는 이러한 작업에 대한 전통적인 별칭을 포함하여 systemctl
없이 간단히 sudo poweroff
또는 sudo reboot
를 입력할 수 있습니다. 그러나 이것이 모든 시스템에서 설정되어 있는 것은 보장되지 않습니다.
다음 단계
지금쯤이면 systemd
를 사용하는 서버를 관리하는 기본 사항을 알고 있을 것입니다. 그러나 필요에 따라 더 많은 것을 배울 수 있습니다. 아래는 이 가이드에서 논의한 구성 요소 중 일부에 대한 보다 심층적인 정보가 포함된 가이드에 대한 링크입니다:
- Systemd 서비스 및 단위 관리를 위한 Systemctl 사용 방법
- Journalctl을 사용하여 Systemd 로그 보기 및 조작하는 방법
- Systemd 단위 및 단위 파일 이해
이단계를 통해 이니셜라이저 시스템의 강점을 활용하여 기계의 상태를 제어하고 서비스 및 프로세스를 더 쉽게 관리할 수 있습니다.