Linux

systemd & systemctl은 무엇인가? sshd.service파일을 파헤쳐보자!

케키키케 2020. 11. 25. 15:34

Linux는 운영체제로, 부팅되는 과정에 시스템을 초기화하고 필요한 서비스들을 위한 환경을 조성한다.

systemd 등장 이전에는 init이 작업을 수행하고, 복잡하게 짜여진 쉘스크립트들로 관리되어 왔다.

systemd는 .service와 .conf파일로 더 단순하게 관리하고 있으며 더 많은 일을 수행하게 되었다.

systemd는 시스템 부팅, 서비스 관리, 프로세스 자원관리 등 다양한 일을 한다.

 

systemd

사용자 공간을 부트스트래핑하고, 최종적으로 모든 프로세스들을 관리하는 init시스템. 

pid 1번으로, 1번 프로세스가 가장 먼저 실행되어 OS에 필요한 각종 데몬을 실행시킨다.

쉘스크립트가 아닌 .service라는 systemd만의 unit을 통해 관리된다.

systemd는 /etc/systemd 아래 설정 파일을 두고 있다.

 

 

systemctl

systemctl은 systemd를 관리하기 위한 도구이다.

systemd의 전반적인 설정을 할 수 있다.

systemctl을 통해 unit 목록, status, 서비스 활성/비활성/실행/종료 등 작업이 가능하다.

서비스 활성(enable)한다는 것은 특정 프로그램을 최초 시스템 부팅 시 자동으로 실행하는 것을 의미한다.

 

-리눅스 시스템 부트 프로세스

 

 

sshd.service

[Unit] 서비스 설명과 의존성 정보 설정

Description=Unit이 제공하는 기본 기능 설명

Documentation=Unit과 관련 있는 문서 위치를 표시. 보통 man과 URI를 통해 제공

After=Unit이 시작되기 전 시작되어야 할 Unit순서 목록 지정. 즉, sshd.service가 실행되기 전 선행되어야 하는 작업 목록

before=Unit이 실행된 후 실행할 Unit 목록

Require=Unit과 의존 관계에 있는 목록으로, 이곳에 지정된 작업 중 하나라도 시작되지 않으면, Unit이 실행되지 않음

Wants=Require보다 약한 개념으로, Unit과 의존 관계에 있지만 실행되지 않더라도 Unit에 영향을 주지 않음

ConditionPathExists=특정 파일의 유무를 기준으로 하여 서비스 실행을 지속/중단할 수 있는 조건을 지정

 

[Service] 서비스 시작/종료 정보 설정

Type=Unit 프로세스 시작 유형 지정. ExecStart에 영향을 줌. simple|forking|oneshot등

EnvironmentFile=서비스의 환경을 설정하는 파일

ExecStart=Unit이 실행될 때, 실행돼야 할 명령어/스크립트. 반대로 ExecStop도 존재

ExecReload=Unit이 reload 될 때 필요한 명령어/스크립트

KillMode=프로세스가 어떻게 종료 될지 설정. Process라면, 주 프로세스를 중지하여 종료하라는 의미.

Restart=Unit이 재시작 되는 조건 설정. on-failure : Exit코드가 0이 아니라면 재시작, on-success : Exit코드가 0이라면 재시작

 

[Install] 부팅시 서비스가 자동으로 구동되도록 할 때 설정

WantedBy=서비스가 어떤 전제 조건 하에 실행하는지 결정. multi-user.target인 경우, runlevel3환경이 셋업 되면 구동?

Alias=유닛의 이름 지정. 확장자 타입을 그래도 따라가야 한다. sshd.service의 경우, ~.service