Study/OS

[Linux] systemctl 명령어 서비스 목록 확인, 등록 방법

 

리눅스에 서비스를 등록하는 방법과 현재 실행중인 서비스 및 서버 재기동 시 자동으로 시작하는 방법에 대해 설명드리겠습니다.

 

서비스라고 하면 두 가지가 있습니다.

service로 실행하는 서비스가 있고 systemctl로 실행하는 서비스가 있는데 두개가 비슷하긴 한데 다릅니다.

Linux service와 systemctl 명령어의 차이 바로가기

 

The Difference Between Systemctl and Service Command in Linux | Baeldung on Linux

Learn the differences between systemctl and service commands in Linux.

www.baeldung.com

 

 

차이점이 더 있겠지만, service 명령어와 systemctl 명령어는 실행하는 경로가 다릅니다.

systemctl 기준으로 설명드리겠습니다.

 

systemctl이란?

systemctl은 systemd 시스템 및 서비스 매니저에서 시스템과 서비스 관련 작업을 제어하고 관리하는 데 사용되는 명령어입니다.

systemd는 현대 리눅스 배포판에서 널리 사용되는 시스템 및 서비스 매니저로, 부팅 프로세스, 서비스 관리, 시스템 상태 확인 등을 통합적으로 관리합니다.

 

등록된 systemctl 서비스 리스트 확인

systemctl로 실행되는 서비스 리스트를 확인하려면 다음 명령어를 사용합니다.

# systemctl로 실행하는 서비스 목록 확인
systemctl list-unit-files

# 원하는 서비스명을 검색
systemctl list-unit-files | grep <찾고자하는 서비스명>

systemctl 서비스 리스트 조회 결과
systemctl 서비스 리스트 조회 결과

상태는 static, generated, masked, enable, disabled로 표시됩니다.

 

각 상태에 대한 설명입니다(출처: ChatGPT4).

list-unit-files 실행 시 확인할 수 있는 STATE 유형 설명
list-unit-files 실행 시 확인할 수 있는 STATE 유형 설명

 

요약하자면,

enable: 활성화된 서비스입니다. 시스템 부팅 시 자동으로 시작됩니다.

disable: 비활성화된 서비스입니다. 시스템 부팅 시 자동으로 시작되지 않으며 사용자가 직접 실행해야 합니다.

masked: 시스템에서(사용자나 관리자가) 실행할 수 없는 서비스입니다.

static: 정적 서비스입니다. 주로 다른 서비스에서 사용되며, 직접 실행할 수 없습니다.

generated: 다른 설정 파일로부터 자동 생성된 unit 파일을 의미합니다.

 

 

 

 

systemctl말고 service로 실행되는 서비스를 조회하려면 다음 명령어를 사용합니다.

# 등록된 서비스 확인
service --status-all

등록된 service 리스트 확인 결과
등록된 service 리스트 확인 결과

 

 

현재 실행중인 systemctl 서비스 목록 조회

실행중인 서비스 리스트를 확인하려면 다음 명령어를 사용합니다.

systemctl list-units --state active

systemctl 실행중인 서비스 목록 조회 결과

명령어를 실행하면 현재 active 상태인 서비스 목록이 조회됩니다.

 

 

systemctl 서비스 등록 방법

서비스 파일 등록하는 방법에 대해 설명드리겠습니다.

제가 쓰는 서버에는 /etc/systemd/system 경로에 systemctl 서비스 파일이 위치하고 있습니다.

그 경로에서 다음과 같은 파일을 생성합니다.

파일명은 원하는 이름으로 지어주면 됩니다.

[Unit]
Description=<원하는이름>
After=network.target
Requires=network.target

[Service]
Type=oneshot
RemainAfterExit=true
User=ubuntu
Group=ubuntu
SyslogIdentifier=<원하는이름>
WorkingDirectory=<실행파일이 있는 경로>
ExecStart=<서비스 시작할때 실행할 파일>
ExecStop=<서비스 종료할때 실행할 파일>

[Install]
WantedBy=multi-user.target

systemctl + 파일명으로 실행하는거라서 서비스를 구분할 수 있는 파일명으로 생성하는게 좋습니다.

 

재부팅 시 서비스 자동 시작 설정

파일을 만들었으면 서비스를 enable 상태로 만들어야 서버 부팅 시 서비스가 실행됩니다.

sudo systemctl enable <서비스명>