티스토리 뷰

반응형

systemd

Systemd는 리눅스 운영 체제에서 사용되는 시스템 및 서비스 관리자입니다.

기본적으로 시스템 초기화 및 서비스 관리를 담당하는 init 시스템의 대안으로 개발되었습니다.

Systemd는 다음과 같은 주요 기능을 제공합니다.

1. 부팅 및 초기화 관리

Systemd는 리눅스 시스템의 부팅 및 초기화를 관리합니다.

이를 통해 병렬 부팅(parallel booting)과 동시 부팅(concurrent booting)을 지원하여 부팅 시간을 단축할 수 있습니다.

2. 서비스 관리

Systemd는 시스템에서 실행되는 서비스, 데몬 및 프로세스를 관리합니다.

서비스를 시작, 중지, 다시 시작하고 상태를 모니터링할 수 있습니다.

3. 유닛 및 유닛 파일

Systemd는 시스템 구성 요소를 단위로 구성된 유닛(unit)으로 관리합니다.

각 유닛은 서비스, 장치, 소켓 등과 같은 특정한 시스템 구성 요소를 나타냅니다.

Systemd는 유닛 파일을 사용하여 각 유닛의 구성을 정의합니다.

4. 로그 및 로깅 관리

Systemd는 시스템 로그를 관리하고 로깅을 지원합니다.

Journalctl이라는 도구를 사용하여 로그를 검색하고 필터링할 수 있습니다.

5. cgroups(Integrated with systemd)

Systemd는 컨트롤 그룹(cgroups)을 사용하여 프로세스 그룹을 제어하고 리소스 사용량을 관리합니다.

이를 통해 서비스 및 프로세스에 대한 자원 할당 및 제한을 설정할 수 있습니다.

Systemd는 많은 리눅스 배포판에서 표준 init 시스템으로 채택되어 있으며, 많은 장점과 기능을 제공합니다. 

하지만 일부 사용자들은 init 시스템의 표준화를 논쟁해왔고, 다양한 init 시스템의 대안이 존재합니다.

 

 

 

 

 

예제

1. 부팅 및 초기화 관리

Systemd를 사용하여 부팅 및 초기화를 관리하는 간단한 예제입니다. 

이 예제는 systemd 서비스를 생성하고 이를 부팅 시 자동으로 실행되도록 구성하는 과정을 보여줍니다.

1) Systemd 서비스 파일 생성
먼저, Systemd 서비스 파일을 생성합니다.

예를 들어, 간단한 "hello.service"라는 서비스 파일을 생성합니다.

[Unit]
Description=Hello World Service

[Service]
Type=simple
ExecStart=/usr/bin/echo "Hello, world!"

[Install]
WantedBy=multi-user.target


이 서비스 파일은 "Hello, world!"라는 메시지를 출력하는 간단한 서비스를 정의합니다.

 


2) 서비스 파일 저장 및 로드
위의 서비스 파일을 "/etc/systemd/system/" 디렉토리에 저장합니다.

그런 다음, 다음 명령을 사용하여 Systemd에 로드합니다.

sudo systemctl daemon-reload



3) 부팅 시 자동 실행 구성
이제 서비스가 부팅 시 자동으로 실행되도록 구성합니다.

sudo systemctl enable hello.service



4) 서비스 시작 및 확인
서비스를 시작하고 현재 상태를 확인합니다.

sudo systemctl start hello.service
sudo systemctl status hello.service

"Hello, world!" 메시지를 출력하는 간단한 서비스가 부팅 시 자동으로 실행됩니다.

 

 

2. 서비스 관리

Systemd는 시스템에서 실행되는 서비스, 데몬 및 프로세스를 관리합니다.

서비스를 시작, 중지, 다시 시작하고 상태를 모니터링할 수 있습니다.
서비스 관리를 위한 간단한 예제를 제공해 드리겠습니다. 

이 예제에서는 Systemd를 사용하여 간단한 커스텀 서비스를 만들고 시작, 중지 및 상태를 확인하는 방법을 보여줍니다.

1) 먼저, 서비스를 실행할 스크립트 파일을 작성합니다.

예를 들어, `/usr/local/bin/myservice.sh`에 다음과 같은 내용의 스크립트를 만듭니다.

#!/bin/bash

echo "My custom service is running!"
sleep 10
echo "My custom service is done!"



2) 이제 Systemd 서비스 파일을 생성합니다. 

예를 들어, `/etc/systemd/system/myservice.service`에 다음과 같은 내용의 파일을 만듭니다.

[Unit]
Description=My Custom Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/myservice.sh

[Install]
WantedBy=multi-user.target



3) 이제 서비스를 시작하고 Systemd에 등록합니다.

sudo systemctl start myservice
sudo systemctl enable myservice



4) 서비스가 올바르게 실행되는지 확인합니다.

sudo systemctl status myservice



5) 서비스를 중지합니다.

sudo systemctl stop myservice

 

이렇게 커스텀 서비스를 생성하고 Systemd를 사용하여 시작, 중지 및 상태를 확인할 수 있습니다. 

이 예제는 간단한 서비스를 만드는 방법을 보여주기 위한 것이며, 실제로는 더 복잡한 설정과 구성이 필요할 수 있습니다.

 

 

 

 

3. 유닛 및 유닛 파일

Systemd는 시스템 구성 요소를 단위로 구성된 유닛(unit)으로 관리합니다.

각 유닛은 서비스, 장치, 소켓 등과 같은 특정한 시스템 구성 요소를 나타냅니다.

Systemd는 유닛 파일을 사용하여 각 유닛의 구성을 정의합니다.
Systemd에서 유닛(unit)은 시스템의 서비스, 장치, 소켓 등과 같은 구성 요소를 나타냅니다.

각 유닛은 유닛 파일을 통해 정의됩니다.

파일은 해당 유닛의 동작 및 구성을 지정합니다.

아래는 간단한 서비스 유닛 파일과 타이머 유닛 파일의 예제입니다.

 

1) 서비스 유닛 파일 예제(service.unit)

서비스 유닛 파일은 시스템에서 실행되는 서비스나 데몬을 정의합니다. \예를 들어, 웹 서버, 데이터베이스 서버 등의 백그라운드 프로세스를 관리하는 데 사용됩니다.

[Unit]
Description=My Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/my_service_executable
Restart=always

[Install]
WantedBy=multi-user.target

- Description: 유닛의 설명
- After: 다른 유닛 이후에 실행되어야 함을 지정합니다. 이 경우에는 네트워크 타겟 이후에 실행됩니다.
- Type: 서비스의 유형을 지정합니다. 이 예제에서는 간단한 단일 프로세스를 실행하는 경우 "simple"을 사용합니다.
- ExecStart: 서비스가 시작될 때 실행할 명령을 지정합니다.
- Restart: 서비스가 비정상적으로 종료되면 다시 시작될지 여부를 지정합니다.
- WantedBy: 시스템 초기화 중에 이 유닛을 어느 타겟에 추가할지를 지정합니다.

 


2) 타이머 유닛 파일 예제(timer.unit)

타이머 유닛 파일은 특정 시간 간격이나 일정 시간에 서비스를 실행하기 위해 사용됩니다.

[Unit]
Description=Run My Service every 10 minutes

[Timer]
OnCalendar=*:0/10
Persistent=true

[Install]
WantedBy=timers.target

- Description: 유닛의 설명
- OnCalendar: 서비스를 실행할 시간을 정의합니다. 이 경우에는 10분마다 실행됩니다.
- Persistent: 시스템이 부팅될 때 유닛의 실행 상태를 유지할지 여부를 지정합니다.
- WantedBy: 타이머를 timers.target에 추가하여 타이머를 부팅 시에 활성화합니다.

이러한 예제들은 Systemd의 유닛 파일이 어떻게 구성되는지를 보여줍니다. 

이러한 유닛 파일은 일반적으로 `/etc/systemd/system/` 디렉토리에 저장되며, `.service` 또는 `.timer` 확장자를 사용하여 저장됩니다. 

설정을 마친 후에는 `systemctl daemon-reload` 명령을 사용하여 시스템에 새로운 유닛 파일을 로드해야 합니다.

 

 

 

 

4. 로그 및 로깅 관리

Systemd는 시스템 로그를 관리하고 로깅을 지원합니다.

Journalctl이라는 도구를 사용하여 로그를 검색하고 필터링할 수 있습니다.

Systemd의 로깅 및 로그 관리에 대한 예제입니다.

아래 예제는 Systemd의 Journalctl 도구를 사용하여 시스템 로그를 읽고 필터링하는 방법을 보여줍니다.

1) 시스템 로그 읽기

journalctl

이 명령은 시스템 로그를 출력합니다. 가장 최근의 로그 항목부터 표시됩니다.

2) 특정 유닛 로그 읽기

journalctl -u nginx.service


이 명령은 'nginx.service' 유닛의 로그를 출력합니다. 

nginx의 로그를 확인하는데 사용할 수 있습니다. 

유닛 이름은 시스템에서 실행되는 서비스 또는 데몬의 이름입니다.

3) 시간 범위 지정하여 로그 읽기

journalctl --since "2022-01-01" --until "2022-01-02"


이 명령은 2022년 1월 1일부터 2022년 1월 2일까지의 로그를 출력합니다.

로그 기간을 지정하여 특정 기간 동안의 로그를 확인할 수 있습니다.

4) 특정 우선 순위 이상의 로그 읽기

journalctl -p err


이 명령은 오류 이상의 우선 순위를 가진 로그를 출력합니다. 

로그 우선 순위는 "emerg", "alert", "crit", "err", "warning", "notice", "info", "debug"로 지정할 수 있습니다.

5) 특정 사용자 로그 읽기

journalctl _UID=1000


이 명령은 UID가 1000인 사용자의 로그를 출력합니다. 

특정 사용자에 대한 로그를 확인할 수 있습니다.

위의 예제는 Systemd의 로깅 및 로그 관리에 대한 간단한 예제입니다. 

Journalctl 도구를 사용하여 로그를 검색하고 필터링하는 방법을 보여주고 있습니다. 

필요에 따라 다양한 옵션을 사용하여 로그를 조사할 수 있습니다.

 

 

 


5. cgroups(Integrated with systemd)

다음은 cgroups를 사용하여 systemd에서 서비스에 대한 자원 제한을 설정하는 예제입니다. 

이 예제에서는 CPU 및 메모리 리소스에 대한 제한을 설정합니다.
먼저, systemd 서비스 유닛 파일에 리소스 제한을 지정하는 옵션을 추가해야 합니다.
예를 들어, `/etc/systemd/system/my-service.service`라는 서비스 유닛 파일이 있다고 가정해 보겠습니다.

이 서비스는 `my-service`라는 이름을 가진 서비스입니다.
아래는 해당 서비스에 CPU 및 메모리 리소스 제한을 추가하는 방법입니다.

[Unit]
Description=My Service

[Service]
ExecStart=/path/to/my-service
CPUQuota=50%
MemoryLimit=512M

[Install]
WantedBy=multi-user.target

위의 예제에서는 `CPUQuota` 및 `MemoryLimit` 옵션을 사용하여 각각 CPU 및 메모리 리소스에 대한 제한을 설정합니다. `CPUQuota`는 CPU 사용량을 백분율로 지정하며, `MemoryLimit`는 메모리 사용량을 바이트 단위로 지정합니다.

서비스를 수정한 후에는 다음 명령을 사용하여 systemd에 변경 사항을 반영합니다.

sudo systemctl daemon-reload

systemd가 서비스의 새로운 설정을 인식하고 적용할 것입니다.

이제 서비스를 시작하면 systemd는 cgroups를 사용하여 지정된 CPU 및 메모리 리소스 제한을 적용할 것입니다.

물론 이것은 단순한 예제이며, 실제로는 더 복잡한 시나리오에 따라 더 많은 옵션을 사용할 수 있습니다. 

자세한 내용은 'systemd.resource-control'의 매뉴얼 페이지를 참조하시기 바랍니다.

 

 

 

 

 

 

 

 

 

 

systemd 타이머 유닛의 설정 파일 스니펫

아래는 systemd 타이머 유닛의 설정 파일 스니펫입니다.

systemd 타이머는 주어진 시간 또는 일정에 따라 작업을 실행하는 데 사용됩니다.

제공된 설정은 시스템 부팅 후 60분마다 실행되고,

매일 오전 6시와 오후 6시에 실행되며,

실행 시간은 12시간마다 무작위로 지연됩니다. 설정의 내용은 다음과 같습니다.

[Timer]
OnBootSec=60min         ; 시스템 부팅 후 60분마다 실행
OnCalendar=*-*-* 6,18:00 ; 매일 오전 6시와 오후 6시에 실행
RandomizedDelaySec=12h   ; 실행 시간을 12시간마다 무작위로 지연
Persistent=true         ; 지속적인 유닛으로 설정하여, 시스템이 부팅될 때마다 실행되도록 함

 

이 설정을 사용하여 실행할 작업에 대한 서비스 유닛을 만들어야 합니다.

일반적으로 systemd 서비스와 함께 사용됩니다.

예를 들어, 타이머가 특정 스크립트를 실행하도록 하려면 해당 스크립트를 실행하는 서비스를 만들어야 합니다.

그런 다음 이 타이머 설정과 함께 사용하세요.

 

이러한 설정은 systemd 타이머를 사용하여 주기적으로 작업을 실행하도록 구성합니다. 

예)  시스템이 부팅되거나 특정 시간에 매일 작업이 실행됩니다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함