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에 등록해줘야 함
서비스 등록 절차
- /etc/systemd/system 디렉터리 아래에 service 파일을 작성 (파일 이름이 서비스 이름: mydaemon.service)
- 작성된 service 파일을 systemd가 읽어서 관리할 수 있도록 함 systemctl daemon-reload
- 서비스가 시작될 수 있도록 설정 systemctl enable [service-name]
- 서비스 시작 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이 어디에 쓰이는 녀석인지 까먹어서 작성해 봤습니다.