Tech Bastion

LINUX log(로그)파일 만들기 본문

OS/linux

LINUX log(로그)파일 만들기

ServerPhantom 2024. 8. 13. 17:46

세상에 저번시간에 작성했던 backup관련 sh파일들이 오탈자가 있어 주말 간 백업이 하나도 안되었던 이슈가 있었어요.

 

스케줄링 처리되는 과정에서 정상적으로 작성은 된 건지. 내부 로직이 어떻게 잘못된 건지 확인이 안 되기 때문에 로그를 남길 수 있도록 처리 하기로 했습니다.

 

 

우선 도커 내부에 있는 db_backup.sh파일부터 진행을 해볼 거예요.


기존 db_backup.sh파일

#! /bin/bash

MYSQLDUMP="/usr/bin/mysqldump"
DB_NAME="db"
DB_USER="root"
DB_PASSWORD="a77afe5fbde2"

# sql backup
$MYSQLDUMP -u$DB_USER -p$DB_PASSWORD $DB_NAME > db_$(date '+%Y%m%d').sql
$MYSQLDUMP -u$DB_USER -p$DB_PASSWORD --all-databases > all_db_$(date '+%Y%m%d').sql

# sql remove
rm -f /db_$(date --date '8 days ago' +%Y%m%d).sql
rm -f /all_db_$(date --date '8 days ago' +%Y%m%d).sql

 

 

변경된 db_backup.sh파일

#! /bin/bash

MYSQLDUMP="/usr/bin/mysqldump"
DB_NAME="db"
DB_USER="root"
DB_PASSWORD="a77afe5fbde2"

LOG_FILE="/backUpLog/backup.log"

{
        echo "Backup started at $(date)"

        # sql backup
        $MYSQLDUMP -u$DB_USER -p$DB_PASSWORD $DB_NAME > db_$(date '+%Y%m%d').sql
        $MYSQLDUMP -u$DB_USER -p$DB_PASSWORD --all-databases > all_db_$(date '+%Y%m%d').sql

        # sql remove
        rm -f /db_$(date --date '8 days ago' +%Y%m%d).sql
	rm -f /all_db_$(date --date '8 days ago' +%Y%m%d).sql

        echo "Backup completed at $(date)"
} >> $LOG_FILE 2>&1

 


 

우선 로그파일 경로를 세팅해 주고 echo를 통해 시작과 끝을 설정해 주었어요.

 

우선 이 내용에서 눈에 띄는 부분을 보면 ">>"와 "2>&1"가 있네요. 잠깐 공부를 하고 지나가면

 

  • ">>" : 기존 로그 파일에 출력을 추가(append) 합니다. 파일이 이미 존재하면 그 내용을 덮어쓰지 않고, 새로운 출력이 추가됩니다.
  • "2>&1: 표준 오류 출력(stderr)을 표준 출력(stdout)으로 리다이렉트 합니다. 즉, 스크립트 실행 중 발생하는 모든 오류 메시지도 로그 파일에 기록됩니다.  

라는 뜻을 가지고 있는데 결국 위 스크립트를 보면 최초 1번은 파일을 생성할 것이고 그 이후부터는 기존 파일에 append를 진행하겠죠?

 

그리고 쭉 쭉 아래로 진행하다가 오류가 생기면 오류내용을 append 하겠고 정상 처리 되면 echo문만 찍힐 거예요

 

리눅스에 세팅 해놨던  docker cp를 위한 스크립트 파일도 수정 해볼게요.

 


기존 dockerCP.sh

#!/bin/bash

CURRENT_DATE=$(date '+%Y%m%d')


docker cp mariadb:db_$CURRENT_DATE.sql /home/db/db_$CURRNET_DATE.sql
docker cp mariadb:all_db_$CURRENT_DATE.sql /home/db/all_db_$CURRENT_DATE.sql

 

 

수정된 dockerCP.sh

#!/bin/bash

LOG_FILE="/home/db/backUp/backUp.log"

CURRENT_DATE=$(date '+%Y%m%d')


{
	echo "CP started at $(date)"

    docker cp mariadb:db_$CURRENT_DATE.sql /home/db/db_$CURRENT_DATE.sql
    docker cp mariadb:all_db_$CURRENT_DATE.sql /home/db/all_db_$CURRENT_DATE.sql
    
    echo "CP completed at $(date)"

} >> $LOG_FILE 2>&1

 


 

이제는 잘 작동하고 로그도 잘 보관 되겠죠???

앞으로 할 일은 리눅스에서 NAS로 매일 매일 백업된 파일을 전송시키는 작업을 자동화 해볼거에요!

 

오늘 내용으로 로그 파일 생성의 이점을 요약해보자면

 

  1. 문제 디버깅 : 스크립트 실행 중 발생하는 오류나 경고를 확인하여 문제를 해결할 수 있다.
  2. 스케줄링 작업 확인 : 크론 작업 등에서 스크립트가 실행되었는지. 실행이 성공했는지 여부를 확인할 수 있다.
  3. 이력 관리 : 스크립트의 실행 이력을 기록하여 언제, 무엇이 실행되었는지를 추적할 수 있습다.

이렇게 정리 할 수 있겠습니다.