반응형
1. Systemd 서비스 관리 요약 |
명령어 | 설명 |
# systemctl status <서비스 명> | 서비스의 현재 상태를 체크 |
# systemctl start <서비스 명> | 서비스의 시작을 명령 |
# systemctl stop <서비스 명> | 서비스의 정지를 명령 |
# systemctl restart <서비스 명> | 서비스의 재시작을 명령 |
# systemctl reload <서비스 명> | 서비스의 갱신을 명령 |
# systemctl kill <서비스 명> | 즉시 서비스를 중지하고, 관련 프로세스 모두 종료 |
# systemctl enable <서비스 명> | boot 시 서비스 시작 활성화 |
# systemctl disable <서비스 명> | boot 시 서비스 시작 비활성화 |
# systemctl is-enable <서비스 명> | boot 시 실행되도록 설정되어 있는지 여부 확인 |
# systemctl is-active <서비스 명> | 현재 실행되고 있는지 여부 확인 |
# systemctl list-dependencies <서비스 명> | 행당 서비스와 의존성 관계에 있는 리스트를 출력 |
# systemctl list-units --type <타입> | 특정 타입에 해당하는 Unit의 리스트를 출력 |
# systemctl list-unit-files | 시스템에 있는 모든 Unit의 리스트와 상태를 출력 |
# systemctl list-sockets | 리스닝(Listening)하는 소켓(socket) 관련 목록을 출력 |
2. Systemd Unit |
RHEL7에서 systemd에는 아래와 같은 Unit 파일이 존재하며 각 Unit은 이름만으로도 그 특징을 알 수 있습니다.
Unit 타입 | 파일 확장자 | 설명 |
Service unit | .service | 시스템 서비스 |
Target unit | .target | systemd unit의 그룹 |
Automount unit | .dautomount | automount 포인트 |
Device unit | .device | 커널에 의해 생성된 디바이스 |
Mount unit | .mount | 마운트 포인트 |
Path unit | .path | 파일시스템에 존재하는 디렉터리나 파일 |
Scope unit | .scope | 외부에서 만들어진 프로세스 |
Slice unit | .slice | 시스템 프로세스를 관리하는 unit들이 계층적으로 구성된 그룹 |
Snapshot unit | sanpshot | systemd 매니저의 상태를 저장하는 스냅샷 |
Socket unit | .socket | 내부 프로세스 통신 소켓 |
Swap unit | .swap | Swap 디바이스나 Swap 파일 |
Timer unit | .timer | 시스템 타이머 |
3. Systemd Unit 파일의 구조, 옵션, 파일 경로 |
Unit 파일은 전통적으로 아래 3가지 섹션으로 구성되어 있습니다.
1) Unit 파일 섹션
지시자 | 설명 |
[Unit] | Unit의 type에 의존적이지 않는 일반적입 옵션을 포함 이 옵션은 Unit을 설명하고, Unit의 동작을 정의 다른 Unit과의 Dependency를 설정< |
[Unit type] | 특정 Unit이 type-specific 지시자를 가지고 있다면 해당 옵션에 대한 항목을 참조하여 Unit 파일을 작성하거나 파악해야 함 |
[Install] | install 관련 정보를 담고 있음 systemctl enable과 systemctl disable에 의한 동작이 기술되어 있음 |
2) Unit 파일의 예시
[Unit]
Description=NTP client/server
After=ntpdate.service sntp.service ntpd.service
Conflicts=ntpd.service
[Service]
Type=forking
PIDFile=/var/run/chronyd.pid
EnvironmentFile=/etc/sysconfig/chronyd
ExecStart=/usr/sbin/chronyd $OPTIONS
ExecStartPost=//usr/libexec/chrony-helper update-daemon
[Install]
WantedBy=multi-user.target
3) Unit 섹션 옵션
옵션 | 설명 |
Description | Unit에 대한 전반적인 설명을 기술 이 영역은 systemctl status 명령어를 사용할 때 표시됨 |
Documenttation | Unit에 대한 문서를 참조할 만한 URI 리스트를 기재함 |
After | After에 정의된 Unit이 활성화된 이후에 Unit이 활성화되어야 함 Requires와는 다르게 After는 After에 명시된 Unit을 활성화 시키지는 않음 Before는 After와 반대되는 기능의 옵션임 |
Requires | Requires에 정의된 Unit 리스트에 의존성이 있음을 말함 Requires 리스트에 있는 Unit은 이 Unit과 같이 활성화 됨 만약 Requires에 있는 Unit이 fail이 된다면 이 Unit도 활성화하지 못함 |
Wants | Requires 보다는 약한 의존성을 나타냄 Wants에 있는 Unit이 fail이 되더라도 이 Unit을 활성화 할 수 있음 |
Conflicts | Requires와 반대로 여기에 명시된 Unit이 활성화되어 있다면 이 Unit을 활성화할 수 있음 |
4) Unit type 섹션 옵션
옵션 | 설명 |
Type | Unit의 시작 Type을 지정함 - simple : 기본적인 형태이며 ExecStart에 있는 것이 메인 프로세스임 - forking : 이미 시작된 ExecStart 프로세스에서 자식(child) 프로세스를 생성하고 그 자식 프로세스가 서비스의 main 프로세스가 됨. 프로세스가 시작되면 부모 프로세스는 사라짐 - oneshot : simple과 유사. 다음 Unit이 시작되기 전에 사라짐 - dbus : simple과 유사. 메인 프로세스가 D-Bus라는 이름을 얻게 될 경우에만 다음 Unit이 시작됨 - notify : simple과 유사. sd_notify() Function을 이용해서 메시지가 전달된 이후에만 다음 Unit이 시작됨 - idle : simple과 유사. 모든 job이 끝날 때가지 실질적인 실행이 지연됨 |
ExecStart | Unit이 시작되고 난 후 실행될 스크립트 커맨드를 정의 |
ExecStop | Unit이 정지되고 난 후 실행될 스크립트 커맨드를 정의 |
Restart | 이 옵션이 정의되면 해당 프로세스가 모두 종료된 후 서비스가 재시작됨 |
RemainAfterExit | True로 설정하게 되면 프로세스가 종료된 후에도 서비스가 활성화되어 있는 것으로 간주함(기본값 false) |
5) Install 섹션 옵션
지시자 | 설명 |
Alias | 이 Unit의 별명을 설정할 수 있으며 각 별명은 space로 구분됨 |
RequiredBy | 이 Unit에게 의존성이 있는 Unit 리스트임 이 Unit이 활성화되면 RequiredBy 리스트에 있는 Unit들은 Require를 얻음 |
WantedBy | 이 Unit에게 Wants를 갖는 Unit 리스트임 이Unit이 활성화되면 WantedBy 리스트에 있는 Unit들은 Want를 얻음 |
Also | Also 리스트에 있는 Unit은 이 Unit이 삭제되거나 설치될 때 같이 삭제되거나 설치됨 |
DefaultInstance | Unit이 활성화 될 때 인스턴스화 될 Unit을 제외함 |
6) Unit의 파일 경로
Unit 위치 | 설명 |
/usr/lib/systemd/system | 패키지 설치 시 배포되는 Unit의 위치 |
/run/systemd/system | Runtime 시에 생성된 systemd Unit (이 디렉터리는 설치 시 배포된 디렉터리와 Unit보다 우선 순위가 높음) |
/etc/systemd/system | 시스템 관리자에 의해 생성되고 관리되는 디렉터리 (이 디렉터리는 Runtime Unit 디렉터리 보다 우선 순위가 높음) |
반응형
'IT 이야기 > Linux' 카테고리의 다른 글
[RHEL 6, 7] RHEL 6 vs RHEL7 주요 변경 항목 (0) | 2019.12.09 |
---|---|
[RHEL 공통] SysVinit vs Systemd (0) | 2019.12.09 |
[RHEL 공통] /proc(proc filesystem) 디렉터리 구조 (0) | 2019.12.09 |
[RHEL7] 디스크 용량 새롭게 할당 받기 (0) | 2019.12.08 |
[RHEL7] VFTP 설치 및 활용 (0) | 2019.12.08 |
댓글