티스토리 뷰
궁금증은 제목 대로 저기서 부터 시작됬습니다.
그런데 파고 들수록 기반에 깔린 배경들이 있더라구요. 한번 같이 알아보겠습니다.
init Process
Linux 부팅시에 최초로 실행되는 process입니다. booting시에 OS 운영에 필요한 서비스들을 실행시키죠.
init Process 동작 방식은 시간이 흐르면서 변했는데 3단계를 거쳐 변화했습니다.
sysVinit -> upstart -> Systemd 순으로 말이죠.
sysVinit
초기 Initialization program 으로 1980년 초반에 만들어졌습니다.
아직도 종종 보이는 service 명령어가 있는데 이게 바로 sysVinit 명령어 입니다.
# sysVinit 명령어
service start <script>
# /etc/init.d/network start
/etc/init.d 하위에 이용가능한 service들이 모두 모여있습니다.
service start | stop | restart 등등 으로 service들을 제어할 수 있죠.
init process는 해당 서비스들을 기반으로 OS 운영 환경을 만드는거죠.
sysVinit은 해당 directory 하위에 스크립트로 서비스들을 실행 및 중지를 해왔습니다.
시간이 흐르면서 해당 프로그램에 제약사항이 드러났습니다.
sysVinit 제약사항
해당 프로그램은 OS 시작, 종료시에만 서비스 기동을 관리하고 운영중에는 아무 관여를 하지 않는다.
이러한 상황에서 서비스 장애가 발생하여 중지되는 경우 사용자가 일일이 대처해야합니다.
또한 장치가 새로 연결되거나 제거되는 경우에도 처리도 할 수 없습니다.
이러한 제약사항을 극복하기 위해 Upstart 프로그램이 등장했습니다.
Upstart
upstart는 이벤트 기반 서비스 관리 프로그램입니다.
sysVinit이 정적으로 서비스들을 관리했다면 Upstart는 이벤트 기반으로 동적으로 서비스를 관리할수 있게되었죠
스크립트 예시
# 서비스 실행 및 중지 event 조건
start on filesystem or startup
stop on shudown
# 실행 스크립트
script
...
end script
# service가 시작하기 전 실행 스크립트
pre-start script
...
end script
# service가 중지되기전에 실행 script
pre-stop script
...
end script
위 예시에서 보시다시피 이벤트 기반으로 서비스를 실행할 수 있어 보다 유연한 서비스 관리를 할 수 있게됩니다.
해당 스크립트는 어디에 위치할까요? 바로 /etc/init 경로에 위치합니다.
sysVInit과 구별하기 위해 '.d'가 제거된 경로에 위치하죠.
이제 보다 진화된 SystemD를 알아봅시다.
SystemD
최근에는 거의 모든 linux에서 SystemD를 기본 Initializer Program으로 사용하는데 장점을 간단히 알아봅시다.
장점
1. service 병렬 실행 가능, boot time 감소
2. 자동 의존성 관리
3. service 장애 모니터링 기능, 장애 서비스 재기동 능력
위에 든 장점 이외에도 여러가지 장점들이 있더라구요. 그래서 SystemD를 채택하는가 봅니다.
SystemdD 명령어로는 현재 우리가 쓰는 systemctl 명령어가 있죠.
systemctl start network # 시작
systemctl status network # 상태 확인
systemctl stop NetworkManager # 중지
SystemD 스크립트 기본 경로는 /etc/systemd/system 에 존재하는데,
기존 SystemV init script도 systemctl 명령어로 관리 할 수 있습니다. 위 예시에 network service도
/etc/init.d/network 에 있으니까요.
결론
sysVinit, Upstart, SystemD로 가면서 service 실행방식이 바뀌었습니다. 각 프로그램마다 script 작성 문법도 각각 있죠.
/etc/init.d, /etc/init, /etc/systemd/system 으로 각 스크립트의 기본 경로도 바뀌었습니다.
해당 경로에 위치한 서비스는 init process가 booting시 실행하게 되고,
사용자는 각 프로그램의 명령어(service, systemctl)로 제어할 수 있습니다.
네. 이제 결론이 나왔네요. service vs systemctl 차이! 이러한 배경안에서 이해하면 도움이 될것 같습니다.
참고자료
'Linux' 카테고리의 다른 글
[Linux] Disk partition 하기 (fdisk) (0) | 2023.01.15 |
---|---|
[Linux] >, >>, <, | 간단한 예제 (0) | 2022.08.18 |
Linux 화면 보호기 해제 (0) | 2022.07.11 |
Linux 사용자 확인 및 삭제 (0) | 2022.07.11 |
.bashrc vs .bash_profile 그리고 user (0) | 2022.07.04 |
- Total
- Today
- Yesterday
- 1종 적성검사
- 1종 적성검사 과태료
- unplugin-auto-import
- 강서 운전면허 시험장
- oracle 19c 설치
- component auto import
- 오블완
- postgresql 트리거
- 스파르타 코딩클럽
- rest api crud
- Oracle Database 19C 설치
- postgresql on update current_timestamp
- vue 컴포넌트 자동 import
- postgresql 외래키
- epel/x86_64
- postgresql 수정시간 자동 갱신
- 외래키 삭제
- rest api 단건 다건
- mariadb 외래키 조회
- express crud
- rest api 조회 생성 수정 삭제
- 1종 적성검사 신체검사
- postgresql trigger
- 1종 적성검사 국가건강검진
- 외래키 인덱스 생성 구문 쿼리
- Oracle Database 19c install
- 티스토리챌린지
- 외래키 생성
- epel repo
- vue 전역 컴포넌트 설정
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |