Fairy ' s

[13. March] 리눅스 #3 / TIL 본문

Devops Bootcamp

[13. March] 리눅스 #3 / TIL

berafairy 2023. 3. 13. 10:32

1. 프로세스 관리
2. 서비스 관리
3. 자동화


프로세스 관리

  • 프로그램 : 사용자가 원하는 일을 처리 할 수 있도록 프로그래밍 언어를 사용하여 수행 절차를 표현해놓은 명령어들의 집합, 코드 / 정적인 파일 상태
  • 프로세스 : 실행되고 있는 프로그램, 프로그램은 운영체제로부터 실행에 필요한 메모리를 할당 받아 코드를 실행한다.
  • 하나의 프로그램은 여러개의 프로세스를 만들 수 있다. (다중 프로세스)
  • 스레드 : 프로세스 안에서 코드가 실행되는 흐름
  • 멀티 스레드 : 애플리케이션 내부의 멀티 태스킹 (멀티 프로세스 : 애플리케이션 단위)
    - 대용량 데이터의 처리시간을 줄이기 위해 데이터를 분할하여 병렬로 처리한다.
    - UI를 가지고 있는 애플리케이션에서 네트워크 통신을 하기 위해 사용할 수 있다.
    - 여러 클라이언트의 요청을 처리하는 서버를 개발할 때에도 사용한다.

리눅스의 프로세스의 동작 방식

  • 포그라운드 (foreground)
    - 사용자가 입력한 명령이 실행되어 결과가 출력될 때까지 기다려야 하는 방식
  • 백그라운드 (background)
    - 프로세스가 실행되는 동안 다른 프로세스가 뒤에서 실행될 수 있다. 백그라운드 작업은 명령의 실행 시간이 많이 걸릴 것으로 예상되거나, 명령을 실행한 후 다른 작업을 해야할 경우 사용한다.
    - 명령어 뒤에 &를 붙여서 실행하고, 다른 명령어를 추가적으로 입력할 수 있다.
    - 백그라운드 방식으로 실행해도 사용자의 터미널 세션이 종료되면 실행중인 프로세스도 종료된다.
    - 작업시간이 오래 걸리는 작업인 경우 'nohup' 명령어를 이용하여 백그라운드로 실행하면, 사용자 터미널 세션이 종료되어도 작업이 종료될 때까지 프로세스를 실행한다.
# 포그라운드 방식 
$ command
$ ping google.com

# 백그라운드 방식 -- &추가 
$ command & 
$ ping google.com &

# nohup 커맨드(no hang up)
$ nohup command &
$ nohup ping google.com &

컴퓨터에서 실행되고 있는 프로세스의 목록을 확인하고 관리하기 위한 명령 사용법 / 기본 용어

  • ps : 현재 실행중인 프로세스의 목록
    - PID : 프로세스 번호
    - TTY : 프로세스가 실행된 터미널의 종류와 번호
    - TIME : 프로세스 실행 시간
    - CMD : 실행되고 있는 프로세스의 이름 (명령)

ps 실행 결과

ps 와 함께 사용할 수 있는 옵션

  • UNIX 방식
    ps -e : 시스템에서 실행중인 모든 프로세스의 정보 출력
    ps - f : 프로세스의 자세한 정보 출력 / *출력 정보 : UID, PPID, C, STIME, TTY, STAT
    ps -u uid : uid로 특정한 사용자에 대한 모든 프로세스의 정보 출력
    ps -p pid : pid로 지정한 특정 프로세스의 정보 출력
  • BSD 방식 / *출력 정보 : USER, %CPU, %MEM, PSS, VSZ, START
    ps a
    : 터미널에서 실행한 프로세스의 정보 출력
    ps u : 프로세스 소유자의 이름, CPU 사용량, 메모리 사용량 등 상세 정보 출력
    ps x : 시스템에서 실행중인 모든 프로세스의 정보 출력

출력 정보 의미 ▼

더보기
- UID : 프로세스를 실행한 사용자 ID
- PPID : 부모 프로세스 번호
- C, %CPU : CPU 사용량 (%)
- STIME : 프로세스의 시작 날짜나 시간
- TTY : 프로세스가 실행된 터미널의 종류와 번호
- STAT : 프로세스 상태
- USER : 사용자 계정 이름
- %MEM : 물리적 메모리 사용량 (%)
- RSS : 사용하고 있는 물리적 메모리 크기(kb)
- VSZ : 사용하고 있는 가상 메모리의 크기(kb)
- START : 프로세스 시작 시간

  • pstree : 컴퓨터 전체 프로세스를 트리 구조로 도식화하여 확인할 수 있는 명령어 / 부모 관계를 한 눈에 파악할 수 있다.
    - man pstree 명령어를 사용하면 의미를 알 수 있다.

pstree 실행 결과


  • kill : 특정 프로세스에 작업 중지, 실행 종료, 대기, 재시작, 강제 종료 등의 시그널을 전달하기 위해 사용

kill 실행 결과

시그널 사용법 / 종류

kill -시그널번호(시그널명) %작업번호
kill -시그널번호(시그널명) PID
  • HUP : 재시작
  • INT : 실행 중지 / Ctrl + c
  • KILL : 강제 종료 
  • TERM : 정상 종료 (기본 명령)
  • CONT : 정지된 프로세스 실행
  • STOP : 터미널에서 입력되는 정지 시그널
  • TSTP : 실행 정지 후 재실행 대시 / Ctri + z

  • jobs : 백그라운드에서 수행 중인 프로세스
    - 다수의 프로세스가 백그라운드에서 작업하는 도중 필요하다면, fg %작업번호 명령으로 포그라운드로 전환할 수 있다.

jobs 실행 결과

  • [1], [2] : 작업 번호
  • ' + ' : 현재 처리되고 있는 작업
  • ' - ' : 다음에 작업할 프로세스

프로세스의 상태

  • Running : 실행중
  • Suspended : 일시 중단 (Ctrl + z 입력)
  • Terminated : 강제 종료 (kill 명령 종료)
  • Done : 정상 종료

서비스 관리 (데몬)

  • 데몬 : 백그라운드에서 작동하는 프로세스 / 상시 실행
    - 리눅스 환경에서 시스템 초기화가 끝난 후, 특별한 프로그램(init)에 의해 자발적으로 백그라운드에서 실행하는 프로그램
    - 프로그램 이름 끝에 'd' 가 붙는다. [ex ≫ syslogd, httpd 등]
    - 데몬이라는 용어는 운영체제 관점이고, 사용자의 관점에서는 '서비스'라고 불린다.
  • 데몬이 하는 일
    - 하드웨어 장치 관리
    - 보조 기억장치와 디렉토리 연결 (마운트)
    - 네트워크를 통한 프로세스간 통신 (소켓)
    - 애플리케이션 수준의 서비스 제공
  • 웹 서버 (httpd) : 웹 서버는 일반적으로 백그라운드에서 작동되므로, 이를 데몬이라고 부를 수 있다.
# index.html 이라는 HTML 파일 생성
$ echo "<html><body><h1>나의 첫 HTML 페이지</h1></body></html>" > index.html

# 웹 서버 실행, 8888 포트를 통해 접속이 가능
$ busybox httpd -h . -p 8888

# 웹 서버에 접속
$ curl http://localhost:8888
<html><body><h1>나의 첫 HTML 페이지</h1></body></html>

# 프로세스 확인 명령 / 데몬이 실행중인지 확인
$ ps aux | grep httpd
ubuntu     10847  0.0  0.0   2456    76 ?        Ss   12:14   0:00 busybox httpd -h . -p 8888
ubuntu     10855  0.0  0.2   7004  2240 pts/1    R+   12:15   0:00 grep httpd

# PID를 이용해 프로세스 강제 종료
$ kill -9 10847

# 웹 서버에 다시 접속 시, 접속 실패
$ curl http://localhost:8888
curl: (7) Failed to connect to localhost port 8888 after 0 ms: Connection refused

  • cron 데몬 : 백그라운드에서 실행하는 스케쥴에 따라 명령을 실행하는 도구, 사람의 개입없이 자동적으로 주기에 따라 명령 실행
$ crontab -e
no crontab for ubuntu - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.basic
  3. /usr/bin/vim.tiny
  4. /bin/ed

Choose 1-4 [1]: 1

≫ 다음과 같은 명령을 실행하면 nano 에디터가 열린다.

# data 명령의 출력과 uptime 명령의 출력을 합쳐서 
# 홈 디렉토리의 uptime.log에기록하는 명령을 매 분마다 실행한다.
# '* * * * *' 는 매 분을 뜻한다. 

* * * * * echo $(/bin/date) - $(/usr/bin/uptime) >> ~/uptime.log

 파일을 저장하고 닫으면, 성공적으로 스케줄에 의한 명령(job)이 등록되었음을 확인할 수 있다.

crontab: installing new crontab

시간이 지난 후 uptime.log 파일을 살펴보면 다음과 같이 백그라운드에서 주기적으로 명령을 실행하는 것을 볼 수 있다.

 

이 실행이 끝나면, 매 분마다 한 줄씩 늘어나는 uptime.log 파일이 한없이 커지지 않도록, 방금 만든 crontab을 삭제해야 한다.

$ crontab -r 
$ crontab -l
no crontab for ubuntu

  • systemctl : 모든 데몬의 목록과, 상태를 확인하고 관리할 수 있다.
# 서비스 목록만 확인
$ systemctl --type=service

cron.service

* cron.service : 시스템 초기화가 끝나고 init에 의해 자동으로 실행되며, 별 다른 데몬 실행 과정 없이 cron 데몬을 발견할 수 있다.

systemctl의 하위 명령

명령 기능
systemctl list-unit-files 설치된 유닛(데몬)을 보여준다.
systemctl enable <unit> 부팅 시 유닛을 활성화한다.
systemctl disable <unit> 유닛이 부팅 시 비활성화된다.
systemctl start <unit> 유닛을 즉시 활성화시킨다.
systemctl stop <unit> 유닛을 즉시 비활성화한다.
systemctl restart <unit> 유닛을 즉시 재시작한다.
systemctl status <unit> 유닛의 상태와 최근 로그들을 조회한다.
  • 시스템 관리자는 주로 서비스의 상태를 파악하고, 제대로 작동중인지, 멈춰있다면 왜 멈춰있는지를 파악하고 재 시작하는 일을 할 수 있어야 한다.
$ systemctl status -l cron

# 이 명령을 통해 crom 데몬의 상태를 확인할 수 있고, 
# 서비스 상태 확인을 통해 가장 최근의 출력 로그를 볼 수 있다.

자동화

  • 쉘(Shell) : 운영체제의 기능, 서비스 구현 할 수 있는 명령어를 사용자에게 받아서 실행할 수 있는 인터페이스 제공
  • bash 쉘 
Comments