1. 크론잡과 크론탭이란?

- 리눅스 시스템에서 crontab을 사용하여 작업을 예약할 수 있다.

- crontab : 시스템에 주기적으로 실행되는 작업을 설정하는 데 사용되는 유닉스 기반의 시간 기반 작업 스케줄러

- 일반적으로 스크립트, 명령 또는 프로그램을 지정된 시간에 실행하도록 예약하는 데 사용

 

루트 계정에서 다음 명령을 이용하여 환경설정을 진행한다.

# apt-get install cron
# apt-get install sudo

 

crontab -e 를 해주면 위와 같이 크론탭 파일이 열리고, 해당 파일을 수정하여 스케줄링화된 작업을 등록할 수 있다.

또한, crontab -l로 크론잡 목록을 조회할 수 있다. 아직 등록된 것이 없기 때문에 위와 같이 출력된다.

# sudo service cron start
# sudo systemctl start cron

위 명령어를 이용하여 최초에는 크론 데몬을 실행해줘야 한다.

 

 

2. 잡 등록해보기

* * * * * command_to_execute

- 분(0~59), 시간(0~23), 일(1~31), 월(1~12), 요일(0-7, 0과 7은 일요일을 나타냄) ex) 0 3 * * * 은 매일 새벽 3시를 의미

- 해당 별표 지점에 */주기를 적어도 된다. ex) */10 * * * * 코드 : 10분마다

>>는 append의 의미를 가지기에 매 분마다 date의 결과를 화면에 찍어줄 것이다.

※ 로깅 등을 할 때 명령어나 실행구문은 되도록 절대경로로 작성하는 것이 바람직하다.

이와 같이 cron.log 파일이 생성되고 매 분마다 date 결과를 찍어주는 것을 볼 수 있다.

$ sudo service cron start

크론잡은 기본적으로 아무 조치를 취하지 않아도 자동으로 실행되지만, 실행되지 않는다면 위와 같이 강제로 시작시킬 수도 있다.

 

💡 실습하기

더보기

매 분마다 특정 문장을 로그에 남겨주는 cronjob 등록하기

시간 정보와 특정 문장을 같이 남도록 등록하기

ex) Wed Feb 21 05:02:01 UTC 2024 : hello cronjob!!!

위와 같이 "$()"를 이용하여 한 줄에 출력하도록 하는 것이 가능하다.

위와 같이 cronjob을 등록할 수 있다.

조회해보면 crontest.log가 잘 생성된 것을 볼 수 있고, 앞서 등록한대로 매 분마다 로그가 잘 남겨지는 것을 확인할 수 있다.

 

 

3. 로깅 본격적으로 해 보기

먼저, 위와 같이 error_out.sh 파일을 생성하고 실행 시 에러가 발생할 구문을 작성해주었다.

chmod로 권한을 준 후 실행해보면 j라는 옵션은 없으므로 위와 같이 오류 메시지가 출력된다.

리다이렉션을 이용하여 err.log에 찍은 후 err.log 파일을 cat으로 확인해보면 아무 내용이 출력되지 않는다.

리다이렉션은 추가적인 옵션이 없다면 정상적인 상황에서 발생하는 메세지만 저장해주고, 오류에 의해 발생하는 메세지를 정상적인 상황에서 발생하는 메세지로 변환해주는 옵션을 추가해야 한다.

해당 내용이 2>&1이고, 이 옵션을 추가하여 err.log에 찍고 조회해보면 위와 같이 오류 메시지가 잘 출력되는 것을 볼 수 있다.

1 : 정상적인 상황에서 발생하는 메시지

2 : 오류에 의해 발생하는 메시지 

2>&1 : 2에 해당하는 메시지를 1 유형으로 변환해주는 옵션

이번에는 정상문장 ls -al과 오류유발문장 ls -j를 같이 적어보았다.

실행 권한을 준 후 실행해보면 위와 같이 정상 결과값과 오류 메시지가 출력된다.

2>&1을 포함하지 않고 로그파일을 만든 후 조회해보면 정상 결과만 출력되는것을 확인할 수 있다.

2>&1을 포함하면 오류메시지까지 모두 저장되어 출력되는 것을 확인할 수 있다.

 

💡 실습하기

더보기

1. 아래 양식에 맞춰 주기적으로 시간과 메시지를 남겨주는 로깅을 해 보자

    yyyy-MM-dd hh:mm:ss - 메시지

2. top을 활용하면 현재 pc 자원에 대한 정보가 나온다.

     yyyy-MM-dd hh:mm:ss - %Cpu(s)... 형식으로 매 10초마다 자원량을 기록하는 쉘 스크립트를 만들어 로깅해보자

 

 

4. 시스템에서 주로 사용하는 명령어와 로깅 항목

- uname : 시스템 및 커널정보 확인, -r(커널 릴리즈 정보), -p(프로세스 정보), -a(전부)

- grep : 조회 내용에서 특정 단어가 포함된 줄 조회, -i(대소문자 무시), -v(제외하고 확인), -E(정규표현식)

- sar : cpu, 메모리, 소켓 i/o 등의 정보 확인

 

1) CPU 사용량 로깅

#!/bin/bash

# 현재 CPU 사용량을 top 명령어로 가져와서 로그 파일에 기록
top -b -n1 | grep "Cpu(s)" >> cpu_usage.log

 

2) 메모리 사용량 로깅

#!/bin/bash

# 현재 메모리 사용량을 free 명령어로 가져와서 로그 파일에 기록
free -m | grep "Mem:" >> memory_usage.log

 

3. 디스크 공간 로깅

#!/bin/bash

# 현재 디스크 사용량을 df 명령어로 가져와서 로그 파일에 기록
df -h >> disk_space_usage.log

 

4. 네트워크 트래픽 로깅

#!/bin/bash

# 현재 네트워크 인터페이스의 트래픽을 가져와서 로그 파일에 기록
ifstat -n >> network_traffic.log

 

'네트워크캠퍼스 > LINUX' 카테고리의 다른 글

jshell을 활용해서 어플리케이션 로깅 체험하기  (0) 2024.02.22
크론탭 메일전송  (0) 2024.02.21
Shell Script 실습  (0) 2024.02.20
Shell Script  (0) 2024.01.17
Devops와 SE를 위한 리눅스 커널 이야기  (0) 2024.01.17

+ Recent posts