데이터로그😎

[Linux] 5. Process와 실행 (daemon, cron) 본문

Data Engineering

[Linux] 5. Process와 실행 (daemon, cron)

지연v'_'v 2024. 1. 16. 10:02

컴퓨터의 구조

컴퓨터 구조

구조 설명 종류
Processor - 컴퓨터의 두뇌. 주어진 명령어를 해독, 실행.
- Memory에 올라와 있는 상태의 프로그램을 CPU가 읽어서 동작 후 데이터 처리
CPU
Memory - 프로그램을 실제 사용할 때 storage의 프로그램을 읽어서 memory에 적재시킴.
- 실행되지 않는 프로그램은 memory에 올라오지 않음
- 프로그램이나 작업을 수행하는 데 필요한 데이터, 명령을 임시저장.
- 전원이 꺼지면 데이터 손실.
RAM, cache
Storage - 프로그램이 깔려있는 장소 (명령어)
- 데이터를 영구적으로 저장, 보존.
HDD, SSD

 

Storage : command(mkdir, top, rm등)는 /bin, /sbin과 같은 storage에 파일의 형태(*program)로 저장되어 있다.
   ▼
Memory: 실행된 program은 memory에 적재된다.
   
Processor : memory에 적재된 program은 processor에 의해 처리된다. 
  • *program: 명령어가 컴터에 저장되어 있는 방식. (storage저장)

 

 

Process 모니터링

현재 CPU에서 처리되고 있는 process를 모니터링 할 수 있는 명령어는 세가지에 대해 알아보겠다.

ps/top/htop

 

1. ps 명령어

(base) ubuntu@JeeYeon:~$ ps

ps

PID - Process ID
- 프로세스 고유 식별자
TTY - Terminal Type
- 프로세스가 실행 중인 터미널 유형 또는 터미널 세션
TIME - CPU Time
- 프로세스가 CPU를 사용한 누적 시간. CPU 사용량을 평가할 수 있음
CMD - Command
- 프로세스가 실행 중인 명령 또는 프로그램

 

ps aux -- 현재 실행되는 모든 프로세스 확인
ps aux | grep apache2 -- 특정 프로세스가 실행되고 있는지 확인

 

 

2. top : ps보다 동적인 정보 제공.

 

 

3. htop : top의 확장 버전

0 [0.0%] 1[0.0%] 와 같이 나와있는 것은 코어 수.

Mem[1.17G/7.61G] -> 총 7.61G 중 1.17G를 사용하고 있다.

 

 

데몬(daemon) : 항상 실행

데몬의 개념

  • 데몬(daemon)
    • 컴퓨터 시스템에서 백그라운드에서 실행되는 프로세스
    • 시스템 부팅 시에 자동으로 시작되어 서비스를 제공하거나 주기적인 작업을 수행함
    • ls , mkdir, rm 등의 프로그램들은 필요할 때 켜고 필요없을 땐 꺼져있다. 이에 반해 daemon 프로그램은 항상 실행된다.
        항상 켜져 있음 사용할 때만 켜져 있음
      가전제품 냉장고, 도어락
      (언제 이 가전제품을 사용할지 모르기 때문에 항상 ON)
      tv, 전자레인지
      컴퓨터 web server (daemon) ls, rm, mkdir 등의 프로그램

 

  • web server (daemon)
    • Client는 server에 필요한 정보를 요청, server는 응답하는 구조.
    • web browser는 필요할 때 켜서 web server에 접속해서 정보를 가져옴.
    • web server는 언제 web browser가 접속하여 요청할지 모르기 때문에 항상 켜져있음 ▶daemon, service
      • web browser : google, edge, safari..
      • client: web browser가 설치된 컴퓨터
      • web server: 클라이언트로부터 HTTP 요청을 받고 정적/동적 콘텐츠를 제공하는 서버. 
        • Apache HTTP Server, Microsoft IIS...

 

service와 자동실행

apache 웹서버를 예로 들며 진행하겠다.

 

1. apache web server 설치

sudo apt-get install apache2​

 

apache2의 위치는 /etc/init.d이다. /etc/init.d는 데몬 프로그램이 위치하는 디렉토리다.

(base) ubuntu@JeeYeon:~$ cd /etc/init.d/
(base) ubuntu@JeeYeon:/etc/init.d$ ls
apache-htcacheclean  dbus               plymouth-log    ufw
apache2              hwclock.sh         procps          unattended-upgrades
apparmor             irqbalance         rsync           uuidd
apport               keyboard-setup.sh  screen-cleanup  x11-common
binfmt-support       kmod               ssh
console-setup.sh     mysql              ubuntu-fan​

 

 

2. 데몬 프로그램 ON/OFF 하기

데몬 프로그램을 켜고 끌 때는 service ~ start/stop 명령어를 사용

sudo service apache2 start  -- apache2 데몬 프로그램 ON​
sudo service apache2 stop   -- apache2 데몬 프로그램 OFF

 

 

실제로 실행되었는지 확인

 

번외)

  • /etc/rc3.d/ 디렉토리 안에 있는 파일 ▶ CLI (콘솔)를 통해 부팅이 될 경우 자동으로 실행되는 서비스이다.
  • /etc/rc5.d/ 디렉토리 안에 있는 파일 ▶ GUI 를 통해 부팅이 될 경우 자동으로 실행되는 서비스이다. 
    • S라고 시작되는 이름을 갖는다면 해당 프로그램은 컴퓨터가 시작될 때 해당 프로그램이 자동으로 실행되고 K라고 시작되면 해당 프로그램은 자동 실행되지 않는다.
    • 아래의 사진은 /etc/rc3.d/ 디렉토리에서 ls -l을 사용해 모든 파일 리스트를 확인한 결과이다. 이 때 S01apache2 라는 것이 있는데, 이는 apache2 서비스가 컴퓨터 부팅시 자동으로 실행될 것임을 의미한다.

 

크론(cron) : 정기 실행

크론은 정기적으로 명령을 실행시켜주는 도구이다.

시스템 운영 시 정기적으로 해야할 업무들이 있다. 정기적인 데이터 백업, 전송 등.

이러한 정기적인 작업들을 처리해야 할 때 cron을 사용할 수 있다.

 

crontab editor 실행

아래와 같은 명령어를 실행하면  crontab editor를 실행할 수 있다. 정기적으로 실행할 작업들을 설정할 수 있다. 

(맨 처음 crontab -e를 실행하면 편집기 옵션이 뜰 것. 나는 easiest way인 nano를 선택)

crontab -e

 

 

crontab 작성

1. 형식

  •  m h  dom mon dow   command   의 형식에 맞춰서 차례대로 작성하면 된다.
      설명 예시
    m 작업이 실행되는 분의 주기 (0-59) 10 : 매시간 10분에 실행
    */10 : 10분에 한 번
    h 작업이 실행되는 시간 주기 (0-23) * : 시간에 상관 없이 실행
    1 : 1시에 실행
    dom 일 (1-31) 24 : 매달 24일
    mon 월 (1-12)  
    dow 요일 (0-6, 0:일, 1:월..)  
    command 명령어 정기적으로 실행할 명령어
    *crontab에 관한 자세한 설명 https://oingdaddy.tistory.com/444

2. 예시

  • 만약 내가 1분마다 date라는 명령어의 실행 결과를 date.log라는 파일에 저장하고 싶다고 해보자. (date라는 명령어는 현재의 시간을 보여준다.)이 때의 command는 무엇일까? 아래 두가지를 사용할 수 있다.
    • date > date.log
      date.log 파일을 새로 만들고, 현재 날짜 및 시간 정보(date 명령어의 출력)를 해당 파일에 덮어씁니다. 기존 파일의 내용은 사라지고, 새로운 내용으로 덮어씌워집니다.
      date >> date.log
      date.log 파일이 이미 존재하면 해당 파일의 끝에 현재 날짜 및 시간 정보(date 명령어의 출력)를 추가합니다. 파일이 없다면 새로 생성합니다. 기존 파일의 내용은 유지되며, 새로운 내용*/1이 파일의 끝에 이어져 추가됩니다.
  • 두번째 명령어를 사용해 crontab을 설정하겠다. 여기서 redirection을 사용할 것이다. 잘 모르겠다면 아래 링크를 확인하길. 2024.01.15 - [Data Engineering/Linux] - [Linux] 2. IO Redirection - output 
    */1 * * * * date >> date.log 2>&1​
    • */1 * * * *  ▶ 1분마다 명령어를 실행
    • date >> date.log   date라는 명령어의 output을 date.log라는 파일에 저장하겠다.
    •  2>&1 standard output 대신 standard error 가 발생한다면  redirection하여 standard output으로 만들겠다. 이 명령어를 통해 에러가 발생해도 로그파일에 기록할 수 있다.
  • crontab 설정결과 확인
    • 아래의 명령어를 통해 date.log라는 파일에 변화가 생기면 화면에 띄워준다. 1분마다 date가 기록되는 걸 볼 수 있다.
      tail -f date.log​
       
  • 만약 crontab 경로를 변경하고 싶다면??
    • crontab을 실행한 결과로 생성된 파일은 보통 홈 디렉토리에 저장이 된다. 나의 경우를 예로 들자면 /home/ubuntu 경로에 date.log 파일이 생성되고 1분마다 업데이트 된다. 그러나 나는 /home/ubuntu/script 디렉토리에 date.log를 저장하고 싶다. 이때는 어떻게 할까? 
    •  쉽다. crontab -e에 경로를 추가해주면 된다. date 명령어를 실행하기 전 cd 명령어를 추가하여 저장하고 싶은 경로로 이동하면 된다! 그리고 반드시 &&을 사용하여 명령어들을 연결시켜 주어야 한다.
    • */1 * * * * cd /home/ubuntu/script && date >> date.log 2>&1​

 

 

Shell startup script

Shell이 시작됐을 때 특정 명령어가 자동으로 실행되도록 하는 것.

만약 내가 bash shell을 처음 실행할 때 'Hi, bash!' 라는 문구가 뜨게 하고싶다면??

.bashrc 파일을 수정하면 된다.

 

.bashrc 파일

  • Bash shell의 설정 파일. Bash shell이 시작될 때 읽혀짐.
  • 사용자의 홈 디렉토리에 위치
  • 사용자 정의 설정, 환경 변수, 함수 및 alias와 같은 bash shell 동작을 커스터마이징 하는데 사용됨
  • .bashrc 파일을 수정하려면 아래와 같이 진행
    • vim ~/.bashrc 혹은
    • nano ~/.bashrc
  • .bashrc 파일에서 수정한 내용을 적용하려면 아래와 같이 진행
    • source ~/.bashrc
    • 터미널 다시 시작
    •  

.bashrc 파일 수정

아래 명령어로 .bashrc 편집기를 오픈한다.

nano ~/.bashrc

 

그후 script의 맨 아래에 echo "Hi, bash!" 를 추가한다.

 

그 후 bash shell을 exit하고 다시 시작하면 Hi, bash! 라는 문구가 자동으로 보이는 것을 알 수 있다.

 

'Data Engineering' 카테고리의 다른 글

[Linux] 7. 권한 (permission)  (0) 2024.01.16
[Linux] 6. 사용자  (0) 2024.01.16
[Linux] 4. 디렉토리 구조와 파일 찾기  (0) 2024.01.15
[Linux] 3. Shell & Shell script  (0) 2024.01.15
[Linux] 2. IO Redirection - output  (0) 2024.01.15