정리하는 공간
리눅스) 리눅스 시스템의 부팅(2. init, systemd, systemctl, journalctl 본문
init 프로세스와 런레벨
런레벨
initd은 시스템 단계를 7개의 모드로 나누어 실행하는 파일이 있는데, 이것이 런 레벨이다.
0
시스템 종료, /etc/rc0.d
1, S
단일 사용자 모드, /etc/rc1.d
문제가 생겼을 때 사용하는 안전모드와 같은 개념으로, 운영체제에 1명만 로그인 가능
네트워크가 안 된다. (응급복구모드)
2
다중사용자 모드(NFS 실행하지 않음), /etc/rc2.d
2명 이상이 필요할 때 전환한다. (NFS-네트워크 파일 서버)
네트워크가 안 된다.
3
다중 사용자모드(NFS 포함),/etc/rc3.d
2번 내용과 같고, 다만 네트워크가 된다.
4
사용하지 않음(예비번호), /etc/rc4.d
5
x11 상태로 부팅, /etc/rc5.d
GUI 현재 사용하고 있는 버전이다.
6
재시작, /etc/rc6.d
Tip : init 런레벨 명령어로 위의 7개 모드로 빠르게 전환 가능하다.
systemd 기본개념
- 소켓 기반으로 동작해 xinet과 호환성 유지
- 장점 : 모든 프로세스가 메모리 할당을 받지 않아 메모리 효율이 좋다
- 단점 : 프로세스 요청을 자주하기 때문에 응답속도가 느려진다.(메모리에 올리고, 내리고 반복하기 때문)
- TCP트래픽의 소켓 정보를 확인해서 출발지나 목적지 등의 정보값을 확인해 특정 호스트를 차단할 수 있다. 이런 소켓 기반의 동작이라고 하는데, xinetd가 이런 일을 한다.
- 쉘과 독립적으로 부팅이 가능하다.
- 마운트 제어가 가능하다. 응급복구 모드로 진입했을 때, 마운트 제어와 fsck 정보도 체킹 가능
- kdump를 활용할지 말지를 체크할 수 있다. (시스템 상태의 백업, 복구)
- SElinux와 통합 가능
- 서비스에 시그널 전달 가능
- shutdown 전 사용자 세션의 안전한 종료가 가능(작업 중 관리자가 셧 다운을 시켜도 작업중 파일이 특정위치에 저장된다.)
system 유닛
systemd는 전체 시스템을 시작하고 관리할 때 Unit(유닛)이라는 구성요소를 사용한다.
서비스이름.유닛의종류
atd.service 의 현태로 관리한다. (유닛 종류는 생략 가능)
service
가장 명백한 유닛으로 데몬을 시작, 종료, 재시작, 로딩한다.
target
유닛들을 그루핑한다. (런레벨 변경시 사용)
systemd 명령어, systemctl
systemctl
유닛을 관리한다.
systemctl 옵션 명령 유닛이름
[옵션]
systemctl -a
상태와 관계없이 유닛 전체를 출력
systemctl -t 유닛
지정한 종류의 유닛만 출력
[명령]
start
유닛 시작(메모리에 유닛을 올린다)
stop
해당 유닛 정지
reload
가동 중인 유닛의 설정 파일을 다시 읽어온다. (동기화)
restart
가동중인 상태에서 환경정보를 동기화하면 오류가 생길 때가 있다.
그래서 restart를 많이 사용한다
status
유닛 상태 출력
-enable
부팅시 유닛 활성화
재부팅시 systemd에 의해 가동되어져야 할 프로세스들이 start 명령으로 메모리에 올리오지 않을 때 사용
-disable
enable 해제
is-active
유닛이 활성화 되어있는지 확인
is-enabled
유닛이 시작되었는지 확인
isolate
지정한 유닛 및 이와 관련된 유닛만 시작하고 나머지는 정지한다.
kill
(start, stop, restart, status, enable, disable 중요)
Tip
서버 관리시
1. 패키지 관리, 다운 및 컴파일
2. 다운 받은 패키지 활성화가 되어 있는지, 메모리에 올려져 있는지 확인
3. 방화벽 설정
systemctl status 명령어로 2번 항목을 잘 해줘야 한다.
journalctl
systemd 데몬이 수집한 로그정보에 대한 질의를 하기 위해 사용하는 명령어
journalctl
sysemd, journal 전체 로그정보를 확인할 수 있다.
특정 프로세스가 동작이 안 될 때 왜인지 '필터링'해서 확인할 수 있다.
journalctl-b
부팅 이후 최근 로그정보 확인
journalctl - -since “2021-01-20 09:00:00”
저 시점을 기준으로 이후에 동작했던 프로세스 정보를 필터링해서 확인할 수 있다.
journalctl - -since “2021-01-20 09:00:00” –until “2021-01-20 10:00:00”
9시부터 10시까지 동작했던 프로세스 정보 필터링 후 확인
journalctl –u sshd.service
sshd.service에 대한 기록 정보를 보여준다.
(-u:특정 디렉터리지정)
런레벨 변경
systemd 활용
systemctl isolate multi-user.target
systemctl isolate runlevel3.target
이런 방식으로 변경한다.
init 활용
init 런레벨
너무나 간편하다
init 명령어의 위치는 /sbin 에 있다.
bin 디렉터리는 베시 쉘 안에 설치된 명령어과 일반 명령어들이 있는 곳이다.
sbin 은 시스템과 연관성 있는 실행파일들과 명령어들이 있는 곳이다.
telinit 활용
init과 같다..
여기까지 명령어들은 런레벨을 적용해도 재부팅하면 기존에 지정된 런레벨로 돌아온다. 즉, 수정사항이 일시적
기본 런레벨 지정
ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default/target
이런 방법이 있다.... 밑줄은 위에 사진에서 원하는거 넣어주면된다..
그냥 init를 쓸거다.
리눅스 종료 방법
shutdown
shutdown -h now
즉시 종료
shutdown -h +10
10분 후에 꺼라~
shutdown -h +10 “System is going down”
메시지를 서버 사용자들에게 전함
shutdown -r
재부팅
halt
poweroff
reboot
init 0(6)
Tip
운영 체제는 종료할 때 처리해야 할 것들이 있는데 이를 무시하고 종료하면 재부팅시 오류 생길수도 있다.
'리눅스 기초' 카테고리의 다른 글
리눅스) 리눅스 시스템의 부팅4(grub2) (0) | 2022.05.12 |
---|---|
리눅스) 리눅스 시스템의 부팅3 (데몬 프로세스) (0) | 2022.05.12 |
리눅스) 리눅스 시스템의 부팅(1. 이론) (0) | 2022.05.12 |
리눅스) 커널 업데이트 하기 (1) | 2022.05.12 |
리눅스) 소스코드를 이용한 패키지 설치 (NCFTP) (0) | 2022.05.12 |