systemd는 많이 사용하는 서비스입니다.
저같은 경우 프로그램을 systemd에 등록하여 시작/재시작/종료/상태 확인을 편리하게 하기위해 사용합니다.
물론 이 기능은 수많은 기능중에 하나이고, 그 외에도 많은 기능들이 있습니다.
오늘은 리눅스의 systemd 서비스에 대해서 포스팅해보겠습니다.
systemd는 rhel7 버전부터 나왔습니다.
그전에는 service 에 등록을 하여 사용했습니다.
service의 경우 시작/재시작/종료/상태 확인용으로 사용하는 스크립트 또는 커맨드입니다.
보통 /etc/init.d에 위치합니다.
systemd의 경우 service의 확장판이라고 보시면 됩니다.
백그라운드로 실행되는 프로세스들을 보통 데몬이라고하는데, 데몬을 등록하여 관리하는 init 서비스이며, 부팅 후 가장 먼저 실행되는 데몬입니다.
특징에 대해서 알아보겠습니다.
1. init 프로세스
-등록된 데몬들을 관리할 수 있으며, 이로 인하여 부팅 속도가 빨라집니다.
2. Unit 파일
-systemd는 다양한 종류의 Unit(서비스,소켓,장치 등) 설정을 사용하여 시스템 자원과 서비스를 정의합니다.
Unit은 파일로 설정할 수 있으며, /etc/systemd/system/와 /lib/systemd/system/에 위치합니다.
rhel의 NetworkManager을 예로들어 보겠습니다.
--------------------------------------------------------------------------------------------------
]# cat /etc/systemd/system/multi-user.target.wants/NetworkManager.service
[Unit]
Description=Network Manager
Documentation=man:NetworkManager(8)
Wants=network.target
After=network-pre.target dbus.service
Before=network.target network.service
[Service]
Type=dbus
BusName=org.freedesktop.NetworkManager
ExecReload=/usr/bin/busctl call org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager Reload u 0
#ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/usr/sbin/NetworkManager --no-daemon
Restart=on-failure
# NM doesn't want systemd to kill its children for it
KillMode=process
# CAP_DAC_OVERRIDE: required to open /run/openvswitch/db.sock socket.
CapabilityBoundingSet=CAP_NET_ADMIN CAP_DAC_OVERRIDE CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SETGID CAP_SETUID CAP_SYS_MODULE CAP_AUDIT_WRITE CAP_KILL CAP_SYS_CHROOT
ProtectSystem=true
ProtectHome=read-only
# We require file descriptors for DHCP etc. When activating many interfaces,
# the default limit of 1024 is easily reached.
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
Also=NetworkManager-dispatcher.service
# We want to enable NetworkManager-wait-online.service whenever this service
# is enabled. NetworkManager-wait-online.service has
# WantedBy=network-online.target, so enabling it only has an effect if
# network-online.target itself is enabled or pulled in by some other unit.
Also=NetworkManager-wait-online.service
--------------------------------------------------------------------------------------------------
위와 같은 Unit파일이 존재하여, systemd에 등록이 되어있습니다.
복잡하게 되어있네요.
3. 병렬 처리
-systemd는 등록된 데몬들의 종속성을 분석하여 많은 서비스를 동시에 시작할 수 있습니다.
이로 인해 부팅 시간이 단축됩니다.
4. 데몬 관리
-systemctl 명령어로 서비스를 시작/재시작/종료/상태 확인을 할 수 있습니다.
5. 로그 관리
-joutnalct로 로그를 관리할 수 있습니다. 또한, /var/log/message에 로그가 설정됩니다.
6. 스케줄링 관리
-crontab 기능을 제공하여 주기적으로 작업을 실행할 수 있습니다.
7. 의존성 관리
-각 Unit에 대한 의존성을 설정하여 서비서 순서등을 보장합니다.
이것 외에도 많은 기능들이 있습니다.
오늘 포스팅은 여기까지 하겠습니다.
'운영체제 > 리눅스' 카테고리의 다른 글
[리눅스] rpm 설치 시 dependency (0) | 2024.12.20 |
---|---|
[리눅스] git SSL certificate problem 해결방법 (4) | 2024.11.11 |
[리눅스] at 명령 (0) | 2024.04.25 |
[리눅스] history 명령어에 날짜 적용 (0) | 2024.02.03 |
[리눅스] /dev/null 이란? (0) | 2024.01.16 |