웹사이트 검색

LFCS: 시스템 시작 프로세스 및 서비스 관리(SysVinit, Systemd 및 Upstart) - 7부


몇 달 전, Linux Foundation은 세계 각지의 개인이 다음을 수행할 수 있도록 하는 것을 목표로 하는 흥미로운 새 프로그램인 LFCS(Linux Foundation Certified Sysadmin) 인증을 발표했습니다. Linux 시스템에서 기본부터 중급까지의 시스템 관리 작업을 수행할 수 있는 자격을 취득하세요. 여기에는 이미 실행 중인 시스템 및 서비스 지원, 직접적인 문제 발견 및 분석, 엔지니어링 팀에 문제를 제기할 시점을 결정하는 기능이 포함됩니다.

다음 비디오에서는 Linux Foundation 인증 프로그램에 대한 간략한 소개를 설명합니다.

이 게시물은 10개의 튜토리얼 시리즈 중 7부입니다. 이 부분에서는 LFCS 인증 시험에 필요한 Linux 시스템 시작 프로세스 및 서비스를 관리하는 방법을 설명합니다.

Linux 시작 프로세스 관리

Linux 시스템의 부팅 프로세스는 여러 단계로 구성되며 각 단계는 서로 다른 구성 요소로 표시됩니다. 다음 다이어그램은 부팅 프로세스를 간략하게 요약하고 관련된 모든 주요 구성 요소를 보여줍니다.

컴퓨터의 전원 버튼을 누르면 마더보드의 EEPROM 칩에 저장된 펌웨어가 POST( 전원 공급 자체 테스트)를 수행하여 시스템의 하드웨어 리소스 상태를 확인합니다. POST가 완료되면 펌웨어는 MBR 또는 EFI에 있는 1단계 부트 로더를 검색하고 로드합니다. 사용 가능한 첫 번째 디스크의 파티션을 지정하고 제어권을 부여합니다.

MBR 방법

MBRBIOS 설정에서 부팅 가능으로 표시된 디스크의 첫 번째 섹터에 있으며 크기는 512바이트입니다.

  1. 처음 446바이트: 부트로더에는 실행 코드와 오류 메시지 텍스트가 모두 포함되어 있습니다.
  2. 다음 64바이트: 파티션 테이블에는 4개의 파티션(기본 또는 확장) 각각에 대한 레코드가 포함되어 있습니다. 무엇보다도 각 레코드는 각 파티션의 상태(활성/비활성), 크기, 시작/끝 섹터를 나타냅니다.
  3. 마지막 2바이트: 매직 넘버는 MBR의 유효성 검사 역할을 합니다.

다음 명령은 MBR 백업을 수행합니다(이 예에서는 /dev/sda가 첫 번째 하드 디스크임). 결과 파일인 mbr.bkp는 파티션 테이블이 손상된 경우(예: 시스템을 부팅할 수 없게 렌더링하는 경우) 유용할 수 있습니다.

물론, 나중에 필요할 때 사용하려면 저장하고 다른 곳에 저장해야 합니다(예: USB 드라이브 등). 해당 파일은 MBR을 복원하는 데 도움이 되며 그 동안 하드 드라이브 레이아웃을 변경하지 않는 경우에만 다시 한 번 작업을 수행할 수 있습니다.

백업 MBR
dd if=/dev/sda of=mbr.bkp bs=512 count=1

MBR 복원 중
dd if=mbr.bkp of=/dev/sda bs=512 count=1

EFI/UEFI 방법

EFI/UEFI 방법을 사용하는 시스템의 경우 UEFI 펌웨어는 설정을 읽어 어떤 UEFI 애플리케이션을 시작할지, 어디에서(즉, 어느 디스크와 파티션에서) 시작할지 결정합니다. EFI 파티션이 있습니다).

다음으로 2단계 부트 로더(부팅 관리자라고도 함)가 로드되어 실행됩니다. GRUB [GRand 통합 부팅]은 Linux에서 가장 자주 사용되는 부팅 관리자입니다. 두 가지 버전 중 하나는 오늘날 사용되는 대부분의 시스템에서 찾을 수 있습니다.

  1. GRUB 레거시 구성 파일: /boot/grub/menu.lst(EFI/UEFI 펌웨어에서 지원되지 않는 이전 배포판).
  2. GRUB2 구성 파일: 대부분 /etc/default/grub입니다.

LFCS 시험의 목표는 GRUB 내부에 대한 지식을 명시적으로 요구하지 않지만, 용기가 있고 시스템을 엉망으로 만들 여유가 있다면 (시험해 볼 수도 있습니다. 만약을 대비해 먼저 가상 머신에서 실행해야 합니다.

update-grub

변경 사항을 적용하려면 GRUB 구성을 수정한 후 루트로 로그인하세요.

기본적으로 GRUB는 기본 커널initrd 또는 initramfs 이미지를 로드합니다. 간단히 말해서 initrd 또는 initramfs는 하드웨어 감지, 커널 모듈 로딩 및 실제 루트 파일 시스템을 마운트하는 데 필요한 장치 검색을 수행하는 데 도움이 됩니다.

실제 루트 파일 시스템이 가동되면 커널은 시스템 및 서비스 관리자(init 또는 systemd, 프로세스 식별 또는 PID가 항상 1임)를 실행하여 일반 사용자를 시작합니다. 사용자 인터페이스를 제공하기 위한 공간 부팅 프로세스입니다.

initsystemd는 모두 시작되는 첫 번째 서비스(부팅 중)와 종료되는 마지막 서비스(종료 중)로서 다른 데몬을 관리하는 데몬(백그라운드 프로세스)입니다.

서비스 시작(SysVinit)

Linux의 런레벨 개념은 실행 중인 서비스를 제어하여 시스템을 사용하는 다양한 방법을 지정합니다. 즉, 런레벨은 현재 실행 상태=런레벨에서 수행할 수 있는 작업과 수행할 수 없는 작업을 제어합니다.

전통적으로 이 시작 프로세스는 System V UNIX에서 시작된 규칙을 기반으로 수행되었으며 시스템은 시스템이 특정 런레벨에 진입할 때 서비스를 시작 및 중지하는 스크립트 모음을 실행합니다. 는 시스템을 실행하는 다른 모드입니다).

각 런레벨 내에서 개별 서비스가 실행되도록 설정하거나 실행 중인 경우 종료되도록 설정할 수 있습니다. 일부 주요 배포판의 최신 버전은 systemd(시스템 데몬을 나타냄)라는 다소 새로운 서비스와 시스템 관리자를 선호하여 System V 표준에서 벗어나고 있지만 일반적으로 호환성을 위해 sysv 명령을 지원합니다. 이는 잘 알려진 대부분의 sysv 초기화 도구를 systemd 기반 배포판에서 실행할 수 있음을 의미합니다.

또한 읽어 보세요: Linux에서 'systemd'가 'init'를 대체하는 이유

시스템 프로세스를 시작하는 것 외에도 init/etc/inittab 파일을 확인하여 어떤 실행 수준을 입력해야 하는지 결정합니다.

Runlevel

설명

0

시스템을 정지합니다. 런레벨 0은 시스템을 빠르게 종료하는 데 사용되는 특별한 전환 상태입니다.

1

s 또는 S라고도 불리는 이 런레벨은 유지 관리 모드라고도 합니다. 이 런레벨에서 시작되는 서비스(있는 경우)는 배포판에 따라 다릅니다. 일반적으로 정상적인 시스템 작동으로 인해 손상될 수 있는 낮은 수준의 시스템 유지 관리에 사용됩니다.

2

다중 사용자. Debian 시스템 및 파생 제품에서는 이것이 기본 실행 수준이며, 가능한 경우 그래픽 로그인을 포함합니다. Red-Hat 기반 시스템에서는 네트워킹이 없는 다중 사용자 모드입니다.

3

Red-Hat 기반 시스템에서 이는 그래픽 환경을 제외한 모든 것을 실행하는 기본 다중 사용자 모드입니다. 이 런레벨과 레벨 4 및 5는 일반적으로 Debian 기반 시스템에서 사용되지 않습니다.

4

일반적으로 기본적으로 사용되지 않으므로 사용자 정의가 가능합니다.

5

Red-Hat 기반 시스템에서는 GUI 로그인이 포함된 전체 다중 사용자 모드입니다. 이 런레벨은 레벨 3과 비슷하지만 GUI 로그인이 가능합니다.

6

시스템을 재부팅합니다.

런레벨 사이를 전환하려면 init 명령인 init N(여기서 N은 위에 나열된 런레벨 중 하나)을 사용하여 런레벨 변경을 실행하면 됩니다. 이는 기존에 로그인한 사용자에게 경고를 제공하지 않기 때문에 실행 중인 시스템을 다른 실행 수준으로 전환하는 권장 방법이 아닙니다. 따라서 작업이 손실되고 프로세스가 비정상적으로 종료됩니다.

대신 shutdown 명령을 사용하여 시스템을 다시 시작해야 합니다(먼저 로그인한 모든 사용자에게 경고 메시지를 보내고 추가 로그인을 차단합니다. 그런 다음 init에 런레벨을 전환하라는 신호를 보냅니다). 그러나 기본 런레벨(시스템이 부팅될 레벨)은 먼저 /etc/inittab 파일에서 편집되어야 합니다.

이러한 이유로 런레벨 간을 적절하게 전환하려면 다음 단계를 따르십시오. 루트로서 /etc/inittab에서 다음 줄을 찾으십시오.

id:2:initdefault:

vim과 같은 선호하는 텍스트 편집기를 사용하여 원하는 실행 수준의 숫자 2를 변경합니다(Linux에서 vi/vim 편집기를 사용하는 방법 – 이 시리즈의 2부에서 설명).

다음으로 루트로 실행하십시오.

shutdown -r now

마지막 명령은 시스템을 다시 시작하여 다음 부팅 시 지정된 런레벨에서 시스템이 시작되도록 하고 /etc/rc[runlevel].d 시작해야 할 서비스와 시작하지 말아야 할 서비스를 결정하기 위한 디렉토리입니다. 예를 들어, 다음 시스템의 런레벨 2입니다.

chkconfig를 사용하여 서비스 관리

부팅 시 시스템 서비스를 활성화하거나 비활성화하려면 CentOS/openSUSE에서는 chkconfig 명령을 사용하고 Debian 및 파생 제품에서는 sysv-rc-conf를 사용합니다. 이 도구는 특정 런레벨에 대해 사전 구성된 서비스 상태를 보여줄 수도 있습니다.

또한 읽어 보세요: Linux에서 원치 않는 서비스를 중지하고 비활성화하는 방법

서비스의 런레벨 구성을 나열합니다.

chkconfig --list [service name]
chkconfig --list postfix
chkconfig --list mysqld

위 이미지에서 postfix는 시스템이 2부터 5까지의 런레벨에 들어갈 때 시작하도록 설정되어 있는 반면, mysqld를 볼 수 있습니다. b>는 기본적으로 2부터 4까지의 런레벨에서 실행됩니다. 이제 이것이 예상되는 동작이 아니라고 가정해 보겠습니다.

예를 들어, 런레벨 5에 대해서도 mysqld를 활성화하고 런레벨 4와 5에 대해서는 postfix를 꺼야 합니다. 다음은 각 경우에 수행할 작업입니다(실행 루트로 명령을 따르십시오).

특정 런레벨에 대한 서비스 활성화
chkconfig --level [level(s)] service on
chkconfig --level 5 mysqld on
특정 런레벨에 대한 서비스 비활성화
chkconfig --level [level(s)] service off
chkconfig --level 45 postfix off

이제 sysv-rc-conf를 사용하여 Debian 기반 시스템에서 유사한 작업을 수행하겠습니다.

sysv-rc-conf를 사용하여 서비스 관리

특정 런레벨에서 자동으로 시작되고 다른 모든 런레벨에서는 시작되지 않도록 서비스를 구성합니다.

1. 다음 명령을 사용하여 mdadm이 시작되도록 구성된 런레벨이 무엇인지 살펴보겠습니다.

ls -l /etc/rc[0-6].d | grep -E 'rc[0-6]|mdadm'

2. sysv-rc-conf를 사용하여 2를 제외한 모든 실행 수준에서 mdadm이 시작되지 않도록 합니다. 원하는 대로 선택하거나 선택 취소(스페이스 바 사용)하면 됩니다(화살표 키를 사용하여 위, 아래, 왼쪽, 오른쪽으로 이동할 수 있습니다).

sysv-rc-conf

그런 다음 q를 눌러 종료하세요.

3. 시스템을 다시 시작하고 1단계의 명령을 다시 실행합니다.

ls -l /etc/rc[0-6].d | grep -E 'rc[0-6]|mdadm'

위 이미지에서 mdadm이 런레벨 2에서만 시작되도록 구성되어 있음을 알 수 있습니다.

systemd는 어떻습니까?

systemd는 여러 주요 Linux 배포판에서 채택하고 있는 또 다른 서비스 및 시스템 관리자입니다. 이는 시스템 시작 중에 더 많은 처리가 병렬로 수행되도록 하는 것을 목표로 합니다(한 번에 하나씩 프로세스를 시작하고 프로세스가 다른 프로세스에 의존하는지 확인하고 대기하기 때문에 항상 속도가 느려지는 경향이 있는 sysvinit와는 다름) 더 많은 서비스를 시작할 수 있도록 데몬을 실행하고 실행 중인 시스템에 대한 동적 리소스 관리 역할을 합니다.

따라서 서비스는 부팅 중에 확실한 이유 없이 시작되는 대신 필요할 때(시스템 리소스 소비를 피하기 위해) 시작됩니다.

systemd 기본 서비스와 SysV 서비스 모두 시스템에서 실행 중인 모든 프로세스의 상태를 확인하려면 다음 명령을 실행하세요.

systemctl

LOAD 열은 단위 정의(서비스 또는 systemd에서 유지 관리하는 모든 항목을 표시하는 UNIT 열 참조)가 올바르게 로드되었는지 여부를 표시하고 ACTIVESUB 열은 해당 장치의 현재 상태를 표시합니다.

서비스의 현재 상태에 대한 정보 표시

ACTIVE 열이 장치의 상태가 활성이 아님을 나타내면 다음을 사용하여 무슨 일이 일어났는지 확인할 수 있습니다.

systemctl status [unit]

예를 들어 위 이미지에서 media-samba.mount는 실패 상태입니다. 뛰자.

systemctl status media-samba.mount

호스트 dev1의 마운트 프로세스가 //192.168.0.10/gacanepa<에서 네트워크 공유를 찾을 수 없기 때문에 media-samba.mount가 실패한 것을 볼 수 있습니다. /비>.

서비스 시작 또는 중지

네트워크 공유 //192.168.0.10/gacanepa를 사용할 수 있게 되면 media-samba.mount 장치를 시작했다가 중지하고 마지막으로 다시 시작해 보겠습니다. 각 작업을 수행한 후 systemctl status media-samba.mount를 실행하여 상태를 확인하겠습니다.

systemctl start media-samba.mount
systemctl status media-samba.mount
systemctl stop media-samba.mount
systemctl restart media-samba.mount
systemctl status media-samba.mount

부팅 중에 시작할 서비스 활성화 또는 비활성화

systemd에서는 부팅 시 서비스를 활성화하거나 비활성화할 수 있습니다.

systemctl enable [service] 		# enable a service 
systemctl disable [service] 		# prevent a service from starting at boot

부팅 시 서비스가 자동으로 시작되도록 활성화 또는 비활성화하는 프로세스는 /etc/systemd/system/multi-user.target.wants 디렉토리에 심볼릭 링크를 추가하거나 제거하는 것으로 구성됩니다.

또는 명령을 사용하여 서비스의 현재 상태(활성화 또는 비활성화)를 확인할 수 있습니다.

systemctl is-enabled [service]

예를 들어,

systemctl is-enabled postfix.service

또한 시스템을 재부팅하거나 종료할 수도 있습니다.

systemctl reboot
systemctl shutdown

갑자기 나타나다

Upstart/sbin/init 데몬을 이벤트 기반으로 대체하며 필요할 때만 서비스를 시작해야 한다는 점에서 탄생했습니다(또한 서비스가 실행되는 동안 서비스를 감독함). 실행 중) 이벤트 발생 시 처리하므로 기존의 종속성 기반 sysvinit 시스템을 능가합니다.

원래 Ubuntu 배포용으로 개발되었지만 Red Hat Enterprise Linux 6.0에서 사용됩니다. sysvinit를 대체하여 모든 Linux 배포판에 배포하기에 적합하도록 의도되었지만 시간이 지나면서 systemd에 의해 가려졌습니다. 2014년 2월 14일, Mark Shuttleworth(Canonical Ltd.의 창립자)는 Ubuntu의 향후 릴리스에서는 systemd를 기본 초기화 데몬으로 사용할 것이라고 발표했습니다.

시스템용 SysV 시작 스크립트가 오랫동안 널리 사용되었기 때문에 많은 소프트웨어 패키지에 SysV 시작 스크립트가 포함되어 있습니다. 이러한 패키지를 수용하기 위해 Upstart는 호환 모드를 제공합니다. 일반적인 위치(/etc/rc.d/rc?.d, /etc/init.d/)에서 SysV 시작 스크립트를 실행합니다. rc?.d, /etc/rc?.d 또는 유사한 위치). 따라서 아직 Upstart 구성 스크립트가 포함되지 않은 패키지를 설치하는 경우에도 여전히 일반적인 방식으로 실행되어야 합니다.

또한 chkconfig와 같은 유틸리티를 설치한 경우 sysvinit 기반 시스템에서와 마찬가지로 이를 사용하여 SysV 기반 서비스를 관리할 수 있습니다.

Upstart 스크립트는 SysV 시작 스크립트보다 더 다양한 작업을 기반으로 서비스 시작 또는 중지도 지원합니다. 예를 들어 Upstart는 특정 하드웨어 장치가 연결될 때마다 서비스를 시작할 수 있습니다.

Upstart 및 해당 기본 스크립트를 사용하는 시스템은 /etc/inittab 파일과 실행 레벨별 SysV 시작 스크립트 디렉토리를 .conf로 독점적으로 대체합니다. /etc/init 디렉토리의 스크립트.

이러한 *.conf 스크립트(작업 정의라고도 함)는 일반적으로 다음으로 구성됩니다.

    1. 프로세스에 대한 설명입니다.
    2. 프로세스가 실행되어야 하는 실행 수준 또는 프로세스를 트리거해야 하는 이벤트입니다.
    3. 프로세스를 중지해야 하는 실행 수준 또는 프로세스를 중지해야 하는 이벤트입니다.
    4. 옵션.
    5. 프로세스를 시작하는 명령입니다.

예를 들어,

My test service - Upstart script demo description "Here goes the description of 'My test service'" author "Dave Null <[email >"
Stanzas

#
Stanzas define when and how a process is started and stopped
See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn
When to start the service
start on runlevel [2345]
When to stop the service
stop on runlevel [016]
Automatically restart process in case of crash
respawn
Specify working directory
chdir /home/dave/myfiles
Specify the process/command (add arguments if needed) to run
exec bash backup.sh arg1 arg2

변경 사항을 적용하려면 upstart에 구성을 다시 로드하도록 지시해야 합니다.

initctl reload-configuration

그런 다음 다음 명령을 입력하여 작업을 시작합니다.

sudo start yourjobname

여기서 yourjobname은 이전에 yourjobname.conf 스크립트를 사용하여 추가된 작업의 이름입니다.

Upstart에 대한 보다 완전하고 자세한 참조 가이드는 프로젝트 웹사이트의 “Cookbook” 메뉴에서 확인할 수 있습니다.

요약

문제 해결 작업뿐만 아니라 컴퓨터 성능 조정 및 필요에 맞는 서비스 실행에도 도움을 받으려면 Linux 부팅 프로세스에 대한 지식이 필요합니다.

이 기사에서는 전원 스위치를 눌러 기계를 켜는 순간부터 완전히 작동하는 사용자 인터페이스를 얻을 때까지 무슨 일이 일어나는지 분석했습니다. 제가 이 책을 정리하는 동안 했던 것처럼 여러분도 이 책을 읽고 많은 것을 배웠기를 바랍니다. 아래에 의견이나 질문을 남겨주세요. 우리는 항상 독자들의 의견을 기다리고 있습니다!


판권 소유. © Linux-Console.net • 2019-2024