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
'프로그래밍 > Linux' 카테고리의 다른 글
[Linux] 리눅스 하드 링크(hard link), 심볼릭 링크(소프트 링크, symbolic link), inode (0) | 2023.09.01 |
---|---|
[Linux] 리눅스 운영체제의 부팅 과정(systemd) (0) | 2023.09.01 |
[Linux] 쉘 스크립트(Shell script) 6편 - shellcheck(쉘체크) (0) | 2023.08.31 |
[Linux] 쉘 스크립트(Shell script) 5편 - 트랩(trap) 사용하기, 에러 옵션(set -e, set -o) (0) | 2023.08.31 |
[Linux] 쉘 스크립트(Shell script) 4편 - 디버그 모드, 에러메시지 출력 (0) | 2023.08.31 |