Systemd Essentials: 서비스, 유닛 및 저널 사용하기

소개

최근 몇 년 동안 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를 설치해야 합니다).

예를 들어, 서비스를 시작하려면 다음을 입력할 수 있습니다:

  1. sudo systemctl start nginx.service

우리는 다시 멈출 수 있습니다. 입력하여:

  1. sudo systemctl stop nginx.service

서비스를 다시 시작하려면 다음을 입력할 수 있습니다:

  1. sudo systemctl restart nginx.service

정상 기능을 방해하지 않고 서비스를 다시로드하려면 다음을 입력할 수 있습니다:

  1. sudo systemctl reload nginx.service

단위 활성화 또는 비활성화

기본적으로 대부분의 systemd 단위 파일은 부팅 시 자동으로 시작되지 않습니다. 이 기능을 구성하려면 해당 단위를 “활성화”해야 합니다. 이렇게 하면 특정 부팅 “대상”에 연결되어 해당 대상이 시작될 때 트리거됩니다.

서비스를 부팅 시 자동으로 시작하도록 설정하려면 다음을 입력하세요:

  1. sudo systemctl enable nginx.service

다시 서비스를 비활성화하려면 다음을 입력하세요:

  1. sudo systemctl disable nginx.service

시스템 상태 개요 얻기

systemd 서버에서 시스템 상태 개요를 얻을 수 있는 많은 정보가 있습니다.

예를 들어, systemd가 “활성”으로 표시한 모든 단위 파일을 가져오려면 (실제로 list-units를 생략할 수 있습니다. 이것은 기본 systemctl 동작입니다):

  1. systemctl list-units

systemd가 메모리에 로드하거나 시도한 모든 유닛을 나열하려면 현재 활성 상태가 아닌 것도 포함하여 --all 스위치를 추가하십시오:

  1. systemctl list-units --all

시스템에 설치된 모든 유닛을 나열하려면 systemd가 메모리에로드 시도하지 않은 것도 포함하여 다음을 입력하십시오:

  1. systemctl list-unit-files

기본 로그 정보보기

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.

가장 오래된 항목부터 모든 로그 항목을보려면 다음을 입력하십시오:

  1. journalctl

journald가 이전 부팅 기록을 저장하도록 구성된 경우 기본적으로 이전 및 현재 부팅에서 항목을 표시합니다. 일부 배포판은 기본적으로이를 활성화하고 다른 배포판은 그렇지 않습니다(이를 활성화하려면 /etc/systemd/journald.conf 파일을 편집하여 Storage= 옵션을 “persistent”로 설정하거나 sudo mkdir -p /var/log/journal을 입력하여 지속적인 디렉토리를 생성하십시오).

현재 부팅에서 로그 항목만 보려면 -b 플래그를 추가하십시오:

  1. journalctl -b

일반적으로 dmesg로 표시되는 커널 메시지 만 보려면 -k 플래그를 사용할 수 있습니다:

  1. journalctl -k

다시 말하지만, 현재 부팅에만 -b 플래그를 추가하여이를 제한할 수 있습니다:

  1. journalctl -k -b

Unit States 및 로그 조회

위의 명령어는 일반 시스템 상태에 대한 액세스를 제공했지만, 개별 단위의 상태에 대한 정보도 얻을 수 있습니다.

단위의 현재 상태 개요를 보려면 systemctl 명령어와 함께 status 옵션을 사용할 수 있습니다. 이렇게 하면 단위가 활성화되었는지, 프로세스에 관한 정보 및 최신 저널 항목이 표시됩니다:

  1. systemctl status nginx.service

해당 단위에 대한 모든 저널 항목을 보려면 journalctl 명령에 단위 이름과 함께 -u 옵션을 지정하십시오:

  1. journalctl -u nginx.service

항상처럼, -b 플래그를 추가하여 현재 부팅에 대한 항목을 제한할 수 있습니다:

  1. journalctl -b -u nginx.service

단위 및 단위 파일 검사

지금까지 단위를 시작하거나 중지하여 단위의 상태를 수정하는 방법을 알았으며, 프로세스의 상황을 파악하기 위해 상태 및 저널 정보를 보는 방법도 알았습니다. 그러나 아직 단위 및 단위 파일의 다른 측면을 검사하는 방법을 보지 않았습니다.

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:

  1. systemctl cat nginx.service

단위의 의존성 트리(단위를 시작할 때 systemd가 활성화하려고 하는 단위)를 보려면 다음을 입력하십시오:

  1. systemctl list-dependencies nginx.service

이는 종속 단위를 표시하며 target 단위가 재귀적으로 확장됩니다. 모든 종속 단위를 재귀적으로 확장하려면 --all 플래그를 전달하세요.

  1. systemctl list-dependencies --all nginx.service

마지막으로 시스템에서 단위의 설정의 저수준 세부 정보를 보려면 show 옵션을 사용할 수 있습니다.

  1. systemctl show nginx.service

이를 통해 systemd에서 관리되는 각 매개변수의 값을 얻을 수 있습니다.

단위 파일 수정

단위 파일을 수정해야 하는 경우 systemd는 실제 디스크 위치로 이동할 필요 없이 systemctl 명령 자체에서 변경 사항을 만들 수 있도록 허용합니다.

기본 단위 파일의 설정을 추가하거나 재정의할 수 있는 단위 파일 스니펫을 추가하려면 단위에 edit 옵션을 호출하세요.

  1. sudo systemctl edit nginx.service

스니펫을 만드는 대신 단위 파일의 전체 내용을 수정하려면 --full 플래그를 전달하세요.

  1. sudo systemctl edit --full nginx.service

단위 파일을 수정한 후에는 변경 사항을 반영하기 위해 systemd 프로세스 자체를 다시 로드해야 합니다.

  1. sudo systemctl daemon-reload

타겟 사용 (런레벨)

이닛 시스템의 다른 기능 중 하나는 서버 자체를 서로 다른 상태로 전환하는 것입니다. 전통적인 이닛 시스템은 일반적으로 이를 “런레벨”이라고 하며, 시스템은 한 번에 하나의 런레벨에만 있을 수 있습니다.

systemd에서는 대신 “타겟”을 사용합니다. 타겟은 기본적으로 서버를 특정 상태로 전환하는 데 사용되는 동기화 지점입니다. 서비스 및 기타 유닛 파일은 타겟에 묶일 수 있으며 여러 타겟이 동시에 활성화될 수 있습니다.

시스템에서 사용 가능한 모든 타겟을 보려면 다음을 입력하십시오:

  1. systemctl list-unit-files --type=target

부팅 시 systemd가 도달하려고 시도하는 기본 타겟을 보려면(이 타겟의 종속성 트리를 구성하는 모든 유닛 파일을 시작함), 다음을 입력하십시오:

  1. systemctl get-default

부팅 시 사용할 기본 타겟을 변경하려면 set-default 옵션을 사용할 수 있습니다:

  1. sudo systemctl set-default multi-user.target

특정 타겟에 묶인 유닛을 확인하려면 다음을 입력할 수 있습니다:

  1. systemctl list-dependencies multi-user.target

시스템 상태를 변경하여 타겟 간 전환을 수행할 수 있습니다. 이렇게 하면 지정된 타겟에 묶이지 않은 모든 유닛이 중지됩니다. 중요한 서비스가 중지되지 않도록 주의하십시오:

  1. sudo systemctl isolate multi-user.target

서버 중지 또는 재부팅

시스템이 전환할 수 있는 주요 상태 중 일부에 대해 바로 가기가 제공됩니다. 예를 들어, 서버를 종료하려면 다음을 입력할 수 있습니다:

  1. sudo systemctl poweroff

시스템을 다시 부팅하려면 다음을 입력하면 됩니다:

  1. sudo systemctl reboot

구조 복구 모드로 부팅하려면 다음을 입력하세요:

  1. sudo systemctl rescue

대부분의 운영 체제는 이러한 작업에 대한 전통적인 별칭을 포함하여 systemctl 없이 간단히 sudo poweroff 또는 sudo reboot를 입력할 수 있습니다. 그러나 이것이 모든 시스템에서 설정되어 있는 것은 보장되지 않습니다.

다음 단계

지금쯤이면 systemd를 사용하는 서버를 관리하는 기본 사항을 알고 있을 것입니다. 그러나 필요에 따라 더 많은 것을 배울 수 있습니다. 아래는 이 가이드에서 논의한 구성 요소 중 일부에 대한 보다 심층적인 정보가 포함된 가이드에 대한 링크입니다:

이단계를 통해 이니셜라이저 시스템의 강점을 활용하여 기계의 상태를 제어하고 서비스 및 프로세스를 더 쉽게 관리할 수 있습니다.

Source:
https://www.digitalocean.com/community/tutorials/systemd-essentials-working-with-services-units-and-the-journal