웹사이트 검색

Systemd Essentials: 서비스, 단위 및 저널 작업


소개

최근 몇 년 동안 Linux 배포판은 다른 init 시스템에서 systemd로 점점 더 많이 전환되었습니다. systemd 도구 모음은 부팅부터 전체 시스템을 관리하기 위한 빠르고 유연한 초기화 모델을 제공합니다.

이 가이드에서는 systemd 지원 서버를 관리하기 위해 알아야 할 가장 중요한 명령을 빠르게 실행합니다. 이는 systemd를 구현하는 모든 서버에서 작동해야 합니다(Ubuntu 15.04, Debian 8, CentOS 7, Fedora 15 이상의 모든 OS 버전). 시작하자.

기본 단위 관리

systemd가 관리하고 작동하는 기본 개체는 "단위\입니다. 단위는 여러 유형이 될 수 있지만 가장 일반적인 유형은 "서비스\입니다(<로 끝나는 단위 파일로 표시됨). 코드>.서비스). 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가 "활성\으로 나열한 모든 단위 파일을 가져오려면 다음을 입력합니다. systemctl 동작):

  1. systemctl list-units

현재 활성화되지 않은 유닛을 포함하여 systemd가 로드했거나 메모리에 로드하려고 시도한 모든 유닛을 나열하려면 --all 스위치를 추가합니다.

  1. systemctl list-units --all

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

  1. systemctl list-unit-files

기본 로그 정보 보기

journald라는 systemd 구성 요소는 시스템의 모든 부분에서 저널 항목을 수집하고 관리합니다. 이것은 기본적으로 응용 프로그램과 커널의 로그 정보입니다.

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

  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

단위 상태 및 로그 쿼리

위의 명령으로 일반 시스템 상태에 대한 액세스 권한을 제공했지만 개별 장치의 상태에 대한 정보도 얻을 수 있습니다.

장치의 현재 상태에 대한 개요를 보려면 systemctl 명령과 함께 status 옵션을 사용할 수 있습니다. 장치가 활성 상태인지 여부, 프로세스에 대한 정보 및 최신 저널 항목이 표시됩니다.

  1. systemctl status nginx.service

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

  1. journalctl -u nginx.service

항상 그렇듯이 -b 플래그를 추가하여 항목을 현재 부팅으로 제한할 수 있습니다.

  1. journalctl -b -u nginx.service

단위 및 단위 파일 검사

지금까지 장치를 시작하거나 중지하여 장치의 상태를 수정하는 방법과 상태 및 저널 정보를 확인하여 프로세스에서 어떤 일이 발생하는지 파악하는 방법을 알고 있습니다. 그러나 유닛과 유닛 파일의 다른 측면을 검사하는 방법은 아직 보지 못했습니다.

단위 파일에는 systemd가 단위를 관리하고 실행하는 데 사용하는 매개변수가 포함되어 있습니다. 단위 파일의 전체 내용을 보려면 다음을 입력하십시오.

  1. systemctl cat nginx.service

장치의 종속성 트리를 보려면(장치를 시작할 때 systemd 장치가 활성화를 시도함) 다음을 입력하십시오.

  1. systemctl list-dependencies nginx.service

이렇게 하면 대상 단위가 재귀적으로 확장된 종속 단위가 표시됩니다. 모든 종속 단위를 재귀적으로 확장하려면 --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

대상 사용(런레벨)

init 시스템의 또 다른 기능은 서버 자체를 다른 상태로 전환하는 것입니다. 전통적인 초기화 시스템은 일반적으로 이를 "런레벨\이라고 부르며 시스템이 한 번에 하나의 런레벨에만 있을 수 있도록 합니다.

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를 사용하는 서버를 관리하는 방법에 대한 기본 사항을 알아야 합니다. 그러나 요구 사항이 확장됨에 따라 배워야 할 것이 훨씬 더 많습니다. 다음은 이 가이드에서 논의한 일부 구성 요소에 대한 자세한 정보가 포함된 가이드 링크입니다.

  • Systemctl을 사용하여 Systemd 서비스 및 단위를 관리하는 방법
  • Journalctl을 사용하여 시스템 로그를 보고 조작하는 방법
  • Systemd 단위 및 단위 파일 이해

init 시스템의 강점을 활용하는 방법을 배우면 머신의 상태를 제어하고 서비스와 프로세스를 보다 쉽게 관리할 수 있습니다.