[요약 설명]
## system이 시작 될 때마다 docker-compose restart를 하기 위해서 systemd에 등록 필요
## vi docker-restart.service 생성 (위치 : cd /etc/systemd/system)
[Unit] |
Description=Restart Docker Compose at /home/XXX/outline |
After=network.target |
[Service] |
Type=oneshot |
User=XXX |
WorkingDirectory=/home/XXX/outline |
ExecStart=/usr/bin/sudo /usr/bin/docker-compose restart |
RemainAfterExit=true |
[Install] |
WantedBy=multi-user.target |
## Description : service에 대한 설명
## After=network.target : 네트워크가 실행된 후 진행
## Type=oneshot : systemd 서비스가 단일 실행 작업을 수행하고 종료하는 유형
(명령이 실행된 후 종료, 백그라운드 지속 실행 x )
## User=frfcomadm 서비스 실행 주체자
## WorkingDirectory : 실행할 디렉토리 설정
## ExecStart : 스타트 옵션, sudo를 통해서 docker-compose restart 진행
## RemainAfterExit : 서비스 실행 후 유지여부
## WantedBy : 런레벨을 정의 (텍스트기반 다중 사용자 모드)
## 마지막으로 시스템이 시작할 때 자동으로 시작하도록 enable 옵션 넣어준다
=====================================================================

리눅스를 실행시키면 systemd라는 프로세스를 한번 쯤 보신 적이 있으실 겁니다.
systemd는 PID1에 속해있을 만큼 굉장히 중요한 역할을 하는데 바로 Linux 운영체제용 시스템 및 서비스를 관리하는 역할을 수행합니다.
PID1이므로 부모 프로세스가 없고 Linux가 부팅되었을 때 가장 먼저 실행되며 사용자가 Linux를 사용할 수 있도록 초기 서비스들을 병렬적으로 실행시켜주는 역할을 합니다.
그리고 가장 마지막에 종료되어 시스템 및 서비스를 종료시키는 역할도 합니다.
기존에는 가장 오래된 init 시스템 중 하나인 Unix System V init system(SysV)와 같은 init 시스템을 사용하고 있었는데 2015년 부터 systemd를 공식 채택하였습니다.
처음엔 많은 우려 곡절이 있었지만 기존 init 시스템에 비해 훨씬 빠른 병렬 처리와 서비스 간 종속적인 실행도 더욱 효율적으로 처리하며 서비스들을 관리하는 측면에서 훨씬 나았기 때문에 이를 공식으로 채택한게 아닐까 생각됩니다.
Systemd를 이용해서 서비스를 만들기
systemd는 서비스들을 실행시키기 위한 스크립트들을 /etc/systemd/system/ 에서 관리합니다. 해당 디렉토리를 ls -al 명령어로 살펴보면 심볼릭 링크로 가득한 것을 확인하실 수 있습니다. 만약 부팅 시 실행시키고 싶은 서비스가 있다면 위 디렉토리에 서비스를 심볼릭 링크로 연결시켜야 합니다.
테스트용 Script 생성
아래와 같이 테스트용 스크립트를 만들어봅시다!
$ vi /root/my-test-script.sh
#!/bin/bash
while :
do
echo -e "Hi! this service is run by systemd"
sleep 1
done
서비스 생성 및 등록
$ vi /root/my-systemd-daemon.service
[Unit]
Description=My Systemd Daemon
[Service]
Type=simple
ExecStart=/root/my-test-script.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
$ sudo ln -s /root/my-systemd-daemon.service /etc/systemd/system/my-systemd-daemon.service
사실 바로 /etc/systemd/system 아래에다가 service를 생성해도 됩니다.
하지만 관리의 편의성을 위해서 테스트용 스크립트와 동일 디렉토리에 위치시켰습니다.
systemctl 명령어 모음
systemctl start: 서비스 시작
서비스를 실행하기 위한 명령어 입니다.
$ systemctl start my-systemd-daemon
systemctl status: 서비스 상태 확인
서비스의 상태를 확인하기 위한 명령어 입니다. 간단한 로그도 확인할 수 있습니다.
$ systemctl status my-systemd-daemon
systemctl stop: 서비스 중지
서비스를 중지할 때 사용하는 명령어 입니다.
$ systemctl stop my-systemd-daemon
systemctl restart: 서비스 재시작
서비스를 중지 -> 시작 순으로 실행합니다.
$ systemctl restart my-systemd-daemon
systemctl enable: 재부팅 시 자동 실행되도록 설정
enable은 단지 시작 프로그램에 추가시켜 부팅 시 실행되도록 하기 위해 사용합니다.
$ systemctl enable my-systemd-daemon
systemctl disable: 재부팅 시 자동 실행되지 않도록 설정
enable한 서비스를 시작 프로그램에서 제외시키기 위해 disable 명령어를 사용할 수 있습니다.
$ systemctl disable my-systemd-daemon
systemctl reload: 서비스 리로드
reload는 restart와 다르게 서비스를 종료했다가 실행시키는게 아닌 해당 서비스의 configuration만 수정했을 경우 빠르게 리로드하여 반영하기 위해 사용합니다.
$ systemctl reload my-systemd-daemon
systemctl daemon-reload: 전체 서비스 리로드
daemon-reload는 reload와 다르게 전체 서비스에 대해서 configuration을 리로드 합니다.
$ systemctl daemon-reload
REFERENCES
Creating and Managing Daemon Services in Linux using Systemd
Introduction
medium.com
'[AWS-FRF] > EC2' 카테고리의 다른 글
[중요][AWS] Vault Consul 포트 이슈 !! (4) | 2025.03.05 |
---|---|
[참고][장애회고] ORM(JPA) 사용 시 예상치 못한 쿼리로 인한 HikariCP 이슈 (3) | 2025.02.19 |
[중요] Amazon Linux 2023 Swap 메모리 설정하기!! (2) | 2025.02.17 |
[중요] 자바 힙(Heap) 메모리 구조 & 동작과정 !! (4) | 2025.02.07 |
[참고][AWS] 리전 및 가용 영역!! (9) | 2024.12.11 |
[참고][AWS] EC2 가용영역 위치!! (62) | 2024.12.05 |
[참고][AWS][Linux] df 명령어 & 마운트 자동 등록(fstab) & UUID란? (39) | 2024.11.18 |
[참고][AWS] EXT4용 - EBS 확장 및 축소!! (38) | 2024.11.18 |
댓글