본문 바로가기
프로그래밍/Linux

[Linux] 쉘 스크립트(shell script) - 7편 서비스 등록(systemd)

by HI_Ai 2023. 8. 31.
반응형

systemd는 현대 리눅스 배포판에서 가장 널리 사용되는 초기화 (init) 시스템 및 시스템 및 서비스 매니저입니다. systemd는 시스템 부팅 과정을 관리하며, 서비스들을 시작, 중지, 재시작하는 등의 작업을 담당합니다.

 

systemctl은 systemd의 주요 관리 도구로, 서비스의 상태를 확인하거나 시작/중지/재시작하는 데 사용됩니다.

systemctl status [service-name]: 서비스의 상태 확인
systemctl start [service-name]: 서비스 시작
systemctl stop [service-name]: 서비스 중지
systemctl restart [service-name]: 서비스 재시작
systemctl enable [service-name]: 부팅 시 서비스 자동 시작 활성화
systemctl disable [service-name]: 부팅 시 서비스 자동 시작 비활성화

 

 

연습 : 파이썬 코드를 활용, Booting시마다 코드 실행

#!/usr/bin/env python3

from gpiozero import RGBLED
from gpiozero import LED
from time import sleep

print('start')

for i in range(100):
        led = RGBLED(red = 17, green = 18, blue = 27)

        led.color = (1,0,0)
        sleep(0.1)

        led.color = (0,1,0)
        sleep(0.1)

        led.color = (0,0,1)
        sleep(0.1)

        led.color = (1,1,1)
        sleep(0.1)

        led.close()
        print(f"{i}times")

print('end')

위의 코드는 라즈베리파이와 RGB 센서를 활용하여 Red, Green, Blue 순서대로 불이 총 100번 들어오게 하는 파이썬 코드입니다. 여기서 중요한 점은 맨 위에 #!/usr/bin/env python3 을 붙여주어 우리는 현재 python을 사용하고 있다고 알려줘야 합니다.

이 코드를 작성하고 파일을 test.py로 저장합니다.

 

chmod +x /path/directory/test.py

chmod를 활용하여 test.py 파일에 execute 권한을 줍니다.

 

이후 /etc/systemd/system/으로 이동하여 sample-service.service파일을 생성합니다.

 cd /etc/systemd/system/
 sudo nano sample-service.service

 

생성한 sample-service.service 파일 내부에 아래의 명령어를 작성합니다.

#!/bin/bash

[Unit]
Description=Sample Service

[Service]
ExecStart=/path/directory/test.py

[Install]
WantedBy=multi-user.target

ExecStart에는 본인이 만든 test.py파일의 위치를 작성합니다.

 

다음으로는 서비스를 시작하면 되겠습니다. 서비스 시작을 위해서는 systemctl명령어를 사용합니다.

sudo systemctl start sample-service.service

이후 서비스를 부팅 시 자동으로 시작하게 하려면 다음 명령어를 사용합니다:

sudo systemctl enable sample-service.service

 

서비스 등록이 완료된 이후 서비스의 상태를 확인하려면 다음 명령어를 사용합니다:

sudo systemctl status sample-service.service

이후 재부팅하여 정상적으로 서비스가 작동이 되는지 확인하면 됩니다.

 

 

만약 정상적으로 작동이 되지 않을 경우에는 위의 경로 및 코드를 다시 한번 확인하고 확인 후에 변경사항을 적용하기 위해 systemd 데몬을 다시 로드라고 서비스를 시작합니다.

sudo systemctl daemon-reload
sudo systemctl start sample-service.service

이후 서비스의 상태를 확인하여 문제 해결 여부를 확인합니다. 이때 , 위의 서비스 상태 확인 코드 이외에도 아래와 같은 코드를 사용할 수 있습니다. 이는 서비스와 관련된 로그를 좀 더 자세히 확인이 가능합니다.

sudo journalctl -u sample-service.service

 

반응형