OS/리눅스

Systemd와 Service 그리고 systemctl

SeungYn 2024. 2. 6. 21:33

Systemd

  • 프로세스 번호 1번으로 커널 부팅 이후에 최초로 생성되는 사용자 레벨 프로세스
  • 기존 Unix나 Linux의 init의 기능과 기타 시스템 관리 기능을 수행
  • 사용자 레벨 부팅, 서비스 관리, 서비스 프로세스 관리, cgroup을 이용한 프로세스 자원 관리 등
  • systemctl 명령어를 이용하여 관리를 해줄 수 있음.

 

아래 그림을 보면 init 파일이 systemd 파일에 링크되어 있음을 확인 가능

 

 

또한 설정 관련 파일은 /etc/systemd 안에 있습니다.

 

 

서비스 등록과 관리

  • systemd는 시스템 관리뿐 아니라 서비스를 관리하는 기능도 있음.
  • systemd는 사용자의 요구에 따라 또는 시스템의 특정 동작 모드에서 특정 서비스를 실행시키거나 정지시키는 서비스 관리 기능도 제공
  • 관리가 필요한 서비스는 먼저 service 파일을 작성하고, 이를 systemd에 등록해줘야 함

 

서비스 등록 절차

  1. /etc/systemd/system 디렉터리 아래에 service 파일을 작성 (파일 이름이 서비스 이름: mydaemon.service)
  2. 작성된 service 파일을 systemd가 읽어서 관리할 수 있도록 함 systemctl daemon-reload
  3. 서비스가 시작될 수 있도록 설정 systemctl enable [service-name]
  4. 서비스 시작 systemctl start [service-name]

 

서비스 파일 형식

아래 그림은 cron.service 파일의 내용

 

서비스 관리 명령어

  • systemctl enable [서비스명] # 서비스 활성화
  • systemctl disable [서비스명] # 서비스 비활성화
  • systemctl start [서비스명] # 서비스 시작
  • systemctl stop [서비스명] # 서비스 종료
  • systemctl restart [서비스명] # 서비스 재시작

 

서비스 등록 실습

1. 실행 파일 만들기

일단 myDaemon.sh 파일을 만든 후

touch myDaemon.sh

 

아래의 스크립트를 작성한다.

#!/bin/bash

echo "start myDaemon"

while:
do
        echo "myDaemon is running"
        sleep 30
done

 

그 후 접근권한을 변경해 준다

chmod 755 myDaemon.sh

 

2. service 파일 만들기

 

아래 경로로 이동 후

cd /etc/systemd/system

 

myDaemon.service 파일을 만든다

sudo touch myDaemon.service

 

myDaemon.service 파일 안에 아래 내용을 작성해 준다.

[Unit]
Description=Systemd Test Daemon(myDaemon)

[Service]
Type=simple
ExecStart=/home/ubuntu/myDaemon.sh

[Install]
WantedBy=multi-user.target

 

 

3. service 시작 후 확인

위에서 봤던 코드로 서비스를 시작시켜 준다

sudo systemctl start myDaemon.service

 

몇 분 뒤 아래 status로 확인하여 준다.

 

sudo systemctl status myDaemon.service

4. service 종료 및 삭제

 

실습을 해봤으니 종료 후 삭제

sudo systemctl stop myDaemon.service
sudo rm myDaemon.service
find . -name myDaemon.service

 

 

ec2와 gitlab-runner을 이용하면서 systemctl이 어디에 쓰이는 녀석인지 까먹어서 작성해 봤습니다.