[Linux] systemd 데몬 만들기
Linux에서 뭔가 환경을 구성해본 경험이 있다면 systemctl 같은 명령을 통해 백그라운드 프로세스를 다뤄본 경험이 있을 것이다. 이를테면 DB나 Docker 같은 기반시스템들 말이다.
이런건 Linux에서 자체적으로 제공하는 데몬 시스템에 의해서 실행되고 관리된다. 이게 일반 프로그램 실행과 다른 점은, 컴퓨터가 켜기면 자동으로 실행되고 실패해서 터지더라도 재실행을 보장해준다는 것이다.
systemctl list-units --type=service --state=running

준비
먼저 적당한 프로그램을 하나 준비했다.

이놈을 데몬으로 한번 띄워보겠다.
Service 파일 작성
먼저 특수한 설정파일로 서비스에 대한 동작을 정의해줘야 한다.
sudo vi /etc/systemd/system/nosyman.service
/etc/systemd/system/ 경로에 *.service의 형태로 파일을 만들고
다음과 같은 형태로 작성해준다.
[Unit]
Description=Test system
[Service]
Type=simple
Restart=on-failure
RestartSec=1
User=myyrakle
WorkingDirectory=/home/myyrakle/.cargo/bin
ExecStart=/home/myyrakle/.cargo/bin/nosyman
[Install]
WantedBy=network-online.target
Unit은 여러가지 실행조건 등을 설정할 수 있는 섹션인데, 여기서는 설명 정도만 넣어뒀다. 단순한 사용사례에서는 이정도면 충분하다.
Service에는 여러가지 설정들이 들어있다.
- Restart=on-failure는 프로세스가 실패하면 재시작하라는 뜻이고
- RestartSec은 실패 후에 얼마다 있다가 재시작할지를 정의한다. 프로세스가 터지면 1초까지 기다렸다가 재시작한다는 뜻이다.
- User는 당연히 실행 주체가 될 유저명
- WorkingDirectory는 실행 경로
- ExecStart는 실행할 명령어다.
Install 섹션의 WantedBy=network-online.target는 네트워크 온라인 상태가 되었을때만 데몬을 실행하라는 뜻이다.
이정도가 다다.
데몬 실행하기
systemctl enable 명령어로 만들어뒀던 설정을 트리거하면
sudo systemctl enable --now nosyman.service
이제 서비스로 등록이 돼서 시작된다.
그럼 리스트에도 뜨고

status 등의 명령어로도 상태를 확인하고

stop과 restart 같은 명령을 사용해서 통제를 할 수도 있다.

디버깅: 시스템 로그 확인
뭔가 잘 안된다 싶을때는 status 명령으로도 간단한 로그는 볼 수 있다.

더 많은 정보를 원한다면 journalctl까지 사용해야 한다.
이런 식이다.
journalctl -u nosyman
