본문 바로가기
반응형
DevOps/ubuntu

Cron을 통한 우분투 용량 최적화

by brightGarden02 2025. 2. 4.

문제 원인: 서버에서 용량이 가득차서 깃랩이 작동하지 않았습니다.

해결 방법: sh 파일을 작성 및 수정하여 1시간 마다 자동으로 Cron이 동작하여 Gitlab 컨테이너에 있는 로그 용량을 지우도록 함으로 해결하였습니다.

 

 

clear-docker-log.sh : Gitlab Docker 컨테이너의 로그 파일을 지우는 스크립트

clear-docker-log.sh 파일 정보는 다음과 같습니다.

#!/bin/bash
# Docker 컨테이너의 로그 파일을 비우는 스크립트
# gitlab 이미지가 포함된 모든 컨테이너의 ID를 가져오기
CONTAINER_IDS=$(docker ps --format '{{.ID}} {{.Image}}' | grep -i 'gitlab' | cut -d ' ' -f 1)
# 컨테이너가 없으면 종료
if [ -z "$CONTAINER_IDS" ]; then
        echo "No running GitLab containers found."
        exit 1
fi
# 각 컨테이너에 대해 로그 파일 비우기
for CONTAINER_ID in $CONTAINER_IDS; do
        CONTAINER_FOLDER="/var/lib/docker/containers/"
        # 해당 컨테이너 ID를 포함한 폴더를 찾기
        CONTAINER_FOLDER_ID=$(ls "$CONTAINER_FOLDER" | grep -i "$CONTAINER_ID")
        # 해당 폴더가 존재하는지 확인
        if [ -n "$CONTAINER_FOLDER_ID" ]; then
                # 컨테이너 폴더 경로 설정
                CONTAINER_PATH="$CONTAINER_FOLDER$CONTAINER_FOLDER_ID"
                LOG_FILE="$CONTAINER_PATH/$CONTAINER_FOLDER_ID-json.log"
                # 로그 파일 크기 확인
                if [ -f "$LOG_FILE" ]; then
                        LOG_SIZE=$(du -sh "$LOG_FILE" | cut -f1)
                        echo "Current log file size for container $CONTAINER_FOLDER_ID: $LOG_SIZE"
                        # 로그 파일 비우기
                        truncate -s 0 "$LOG_FILE"
                        echo "Log file for container $CONTAINER_FOLDER_ID has been cleared."
                else
                        echo "Log file not found for container $CONTAINER_FOLDER_ID"
                fi
        else
                echo "No folder found for container $CONTAINER_ID"
        fi
done

 

 

 

Cron이 무엇을 동작 시키는지 확인 방법: crontab -e 명령어

crontab -e 명령어를 통해 매시 0분마다 실행하며 sh 파일을 동작시키게 하였습니다.

0 * * * * /home/cron/clear-docker-log.sh >> /home/cron/cron.log 2>&1

 

댓글


반응형
반응형