본문 바로가기

OS/Linux

[Linux]소스 컴파일 후 systemctl 사용하기 (service 등록하기)

소프트웨어를 소스 코드로부터 컴파일하여 설치한 후에, 우리는 종종 이를 시스템이 시작할 때 자동으로 시작되도록 설정하고 싶어합니다. 이를 위해 시스템의 서비스 관리자인 systemctl을 사용하여 소프트웨어를 '서비스'로 등록할 수 있습니다. 그렇게 하면 간단한 명령으로 서비스를 시작, 중지, 재시작할 수 있습니다.

Contents

  • 서비스 파일 생성 : /usr/lib/systemd/system/서비스이름.service
    • 서비스 파일만 생성해도 systemctl 사용 가능하다.
  • 심볼릭 링크 생성 : /etc/systemd/system/multi-user.target.wants/서비스이름.service
    • systemctl enable 명령어를 실행하여도 심볼릭 링크가 생성된다

Example - Haproxy 등록

서비스 파일 생성

서비스 파일 이름: haproxy.service

위치: /usr/lib/systemd/system/haproxy.service

이 파일을 생성하면 systemctl을 통해 서비스를 관리할 수 있습니다.

 

설정 파일 내용 분석:
[Unit] 섹션: 서비스에 대한 설명, 언제 서비스를 시작할 것인지에 대한 종속성을 설정합니다.
[Service] 섹션: 실제 서비스가 시작될 때 실행되는 명령어나 스크립트를 정의합니다.
[Install] 섹션: 서비스를 어느 대상에 의해 원하는 지 (즉, 언제 시작되어야 하는지) 정의합니다.

 

[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target

[Service]
EnvironmentFile=/etc/sysconfig/haproxy
ExecStart=/usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid $OPTIONS
ExecReload=/bin/kill -USR2 $MAINPID
KillMode=mixed

[Install]
WantedBy=multi-user.target

[Unit]

Description : 서비스에 대한 설명 작성

Before : 시작되기 전에 실행할 것

After : 시작된 이후 실행할 것

Requires : 필요조건, 정상적일 경우, 서비스를 시작

Wants : "Requires" 보다 다소 완화된 옵션이다.

충분 조건으로서, 상위 의존성 목록에 포함된 유닛이 시작되지 않았더라도 전체 수행 과정에 영향을 끼치지 않는다.

이 옵션은 하나의 유닛을 다른 유닛과 연계할 경우 사용하게 된다.

[Service]

EnvironmentFile : 해당 유닛에서 사용할 환경 변수 파일을 정의한다. 반드시 Exec* 명령어 보다 상단에 위치

ExecStart : 시작 명령 정의

ExecReload : Reload 명령 정의

[Install]

WantedBy, RequiredBy

"systemctl enable" 로 유닛을 등록할 때 등록에 필요한 유닛을 지정한다.

해당 유닛을 등록하기 위한 종속성 검사 단계로 볼 수 있다.

따라서 해당 설정은 [Unit] 섹션의 "Wants=" 와 "Requires=" 옵션과 관계 있다.

심볼릭 링크 생성

systemctl enable 명령어를 실행하면 /etc/systemd/system/multi-user.target.wants/ 디렉토리에 서비스 파일에 대한 심볼릭 링크(단축 경로)가 생성됩니다. 이것은 시스템 부팅 시 자동으로 해당 서비스가 시작되도록 합니다.

root@jv0535 [/etc/haproxy]systemctl enable haproxy
Created symlink from /etc/systemd/system/multi-user.target.wants/haproxy.service to /usr/lib/systemd/system/haproxy.service.

 

 

service 시작, 중지, 재시작 방법

## 시작
systemctl start haproxy
## 중지
systemctl stop haproxy
## 스크립트 인식하기
systemctl daemon-reload
## 재시작
systemctl restart haproxy
## 부팅시 자동 시작
systemctl enable haproxy