데이터로그😎
[Linux] 5. Process와 실행 (daemon, cron) 본문
컴퓨터의 구조
구조 | 설명 | 종류 |
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
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 명령어 정기적으로 실행할 명령어
2. 예시
- 만약 내가 1분마다 date라는 명령어의 실행 결과를 date.log라는 파일에 저장하고 싶다고 해보자. (date라는 명령어는 현재의 시간을 보여준다.)이 때의 command는 무엇일까? 아래 두가지를 사용할 수 있다.
-
date.log 파일을 새로 만들고, 현재 날짜 및 시간 정보(date 명령어의 출력)를 해당 파일에 덮어씁니다. 기존 파일의 내용은 사라지고, 새로운 내용으로 덮어씌워집니다.date > date.log
date.log 파일이 이미 존재하면 해당 파일의 끝에 현재 날짜 및 시간 정보(date 명령어의 출력)를 추가합니다. 파일이 없다면 새로 생성합니다. 기존 파일의 내용은 유지되며, 새로운 내용*/1이 파일의 끝에 이어져 추가됩니다.date >> date.log
-
- 두번째 명령어를 사용해 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
- 아래의 명령어를 통해 date.log라는 파일에 변화가 생기면 화면에 띄워준다. 1분마다 date가 기록되는 걸 볼 수 있다.
- 만약 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 |