새소식

반응형
DevOps/우분투 자동화

DevOps 엔지니어를 위한 12가지 필수 Bash 스크립트 자동화

  • -
반응형

[DevOps]스크립트자동화 text image

DevOps 엔지니어를 위한 12가지 필수 Bash 스크립트 자동화

DevOps 엔지니어로서 가장 중요한 목표 중 하나는 효율성을 높이고 반복적인 작업을 줄이는 것입니다.
Bash 스크립트를 활용하면 시스템 관리, 모니터링, 배포 등의 작업을 자동화하여 시간과 노력을 절약할 수 있습니다.

이번 포스트에서는 DevOps 환경에서 꼭 자동화해야 할 12가지 Bash 스크립트를 소개합니다.
이 스크립트들은 여러분의 인프라를 더 안전하고 효율적으로 관리하는 데 큰 도움이 될 것입니다.


1. 시스템 업데이트 자동화 🖥️

시스템 패키지를 정기적으로 업데이트하는 것은 보안 및 성능 유지의 기본입니다.
아래 스크립트를 사용하면 자동으로 시스템을 업데이트할 수 있습니다.

#!/bin/bash
echo "시스템 업데이트 시작..."
sudo apt update && sudo apt upgrade -y
echo "시스템 업데이트 완료."

특징:

  • 패키지 목록을 새로 고치고, 설치된 패키지를 업그레이드합니다.
  • -y 플래그로 사용자 확인 없이 자동 승인됩니다.

💡 활용 팁:
cron을 활용해 매일 정기적으로 실행하도록 설정하세요.


2. 디스크 사용량 모니터링 💾

디스크 공간이 부족하면 시스템이 멈출 위험이 있습니다.
아래 스크립트를 사용하면 디스크 사용량이 80%를 초과할 경우 경고를 받을 수 있습니다.

#!/bin/bash
THRESHOLD=80
df -h | awk '{ if($5+0 > THRESHOLD) print $0; }' | while read output;
do
    echo "⚠️ 디스크 사용량 경고: $output"
done

특징:

  • 디스크 사용량이 80%를 초과하면 경고 메시지를 출력합니다.

💡 활용 팁:
메일 알림(mail 명령어)을 추가하면 실시간으로 경고를 받을 수 있습니다.


3. 자동 백업 🗂️

데이터 손실은 치명적입니다. 중요한 디렉토리를 주기적으로 백업하는 것이 필수입니다.

#!/bin/bash
SOURCE="/path/to/important/data"
DEST="/path/to/backup/location"
TIMESTAMP=$(date +"%Y%m%d%H%M%S")
tar -czvf $DEST/backup_$TIMESTAMP.tar.gz $SOURCE
echo "✅ 백업 완료: $DEST/backup_$TIMESTAMP.tar.gz"

특징:

  • 중요한 데이터를 .tar.gz 형태로 압축하여 저장합니다.

💡 활용 팁:
cron을 사용해 매일 밤 자동으로 실행되도록 설정하세요.


4. 로그 로테이션 📝

로그 파일이 계속 커지면 디스크 공간을 차지하게 됩니다.
아래 스크립트를 활용하면 로그 파일을 정리하고 압축할 수 있습니다.

#!/bin/bash
LOG_FILE="/path/to/logfile.log"
BACKUP_DIR="/path/to/log/backup"
TIMESTAMP=$(date +"%Y%m%d")
mv $LOG_FILE $BACKUP_DIR/log_$TIMESTAMP.log
gzip $BACKUP_DIR/log_$TIMESTAMP.log
touch $LOG_FILE
echo "✅ 로그 로테이션 완료."

특징:

  • 로그 파일을 백업 폴더로 이동 후 압축하고, 새 로그 파일을 생성합니다.

💡 활용 팁:
오래된 로그를 자동 삭제하는 기능을 추가하면 더 깔끔한 관리가 가능합니다.


5. SSH 키 자동 설정 🔑

SSH 키를 설정하는 과정은 번거로울 수 있습니다.
아래 스크립트를 사용하면 간단하게 SSH 키를 설정할 수 있습니다.

#!/bin/bash
ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa -q -N ""
ssh-copy-id user@remote_server
echo "✅ SSH 키 설정 완료."

특징:

  • RSA 키 쌍을 생성하고 원격 서버에 공개 키를 자동으로 복사합니다.

💡 활용 팁:
SSH 키 기반 인증을 활용하면 비밀번호 없이 자동화 작업이 가능합니다.


6. MySQL 데이터베이스 백업 🗄️

데이터베이스 백업은 절대 빼놓을 수 없는 작업입니다.
아래 스크립트를 사용하면 MySQL 데이터베이스를 자동으로 백업할 수 있습니다.

#!/bin/bash
DB_NAME="my_database"
USER="db_user" 
PASSWORD="db_pass"
BACKUP_DIR="/path/to/backup"
TIMESTAMP=$(date +"%Y%m%d%H%M%S")
mysqldump -u $USER -p$PASSWORD $DB_NAME > $BACKUP_DIR/${DB_NAME}_$TIMESTAMP.sql
echo "✅ 데이터베이스 백업 완료: $BACKUP_DIR/${DB_NAME}_$TIMESTAMP.sql"

특징:

  • mysqldump를 사용하여 데이터베이스를 백업합니다.

💡 활용 팁:
백업 파일을 **클라우드 스토리지(S3, GCP, FTP)**에 자동 업로드하도록 설정하면 더욱 안전합니다.


7. Docker 정리 🐳

Docker 컨테이너와 이미지가 쌓이면 디스크 공간을 차지하게 됩니다.
아래 스크립트를 실행하면 불필요한 컨테이너와 이미지를 정리할 수 있습니다.

#!/bin/bash
docker system prune -af
docker volume prune -f
echo "✅ Docker 정리 완료."

특징:

  • 중지된 컨테이너, 미사용 이미지, 볼륨 등을 모두 정리합니다.

💡 활용 팁:
정기적으로 실행하여 Docker 환경을 최적화하세요.

 


8. Kubernetes Pod 상태 확인 🚀

지정된 네임스페이스의 Pod 상태를 확인하는 스크립트입니다.

#!/bin/bash
# Kubernetes pod 상태 확인
NAMESPACE="default"
kubectl get pods -n $NAMESPACE

특징: 지정된 네임스페이스의 모든 Pod 상태를 표시합니다.
💡 활용 팁: Pod 상태 이상 시 알림을 보내는 로직을 추가하면 모니터링이 강화됩니다.


9. SSL 인증서 만료 확인 🔐

SSL 인증서가 만료되면 서비스 장애가 발생할 수 있습니다. 미리 점검하세요!

#!/bin/bash
# SSL 인증서 만료 확인 
DOMAIN="example.com"
EXPIRY_DATE=$(echo | openssl s_client -servername $DOMAIN -connect $DOMAIN:443 2>/dev/null | openssl x509 -noout -dates | grep notAfter | cut -d= -f2)
DAYS_LEFT=$(( ($(date -d "$EXPIRY_DATE" +%s) - $(date +%s)) / 86400 ))
echo "$DOMAIN의 SSL 인증서는 $DAYS_LEFT일 후에 만료됩니다."

특징: 인증서 만료까지 남은 일수를 계산해 알려줍니다.
💡 활용 팁: 30일 미만 남았을 때 자동으로 알림을 보내도록 설정하세요.


10. Git 자동 풀 🛠

배포 자동화를 위해 최신 코드를 서버에 반영하는 스크립트입니다.

#!/bin/bash
# Git 저장소에서 최신 코드 자동 풀
REPO_PATH="/path/to/repo"
BRANCH="main"
cd $REPO_PATH
git pull origin $BRANCH
echo "$BRANCH 브랜치에서 코드 풀 완료."

특징: 지정된 브랜치에서 최신 코드를 가져옵니다.
💡 활용 팁: CI/CD 파이프라인에 통합하면 배포가 훨씬 간편해집니다.


11. 사용자 계정 관리 👤

새 사용자를 신속하게 추가하는 스크립트입니다.

#!/bin/bash
# 새 사용자 추가
USERNAME=$1
sudo useradd -m $USERNAME 
sudo passwd $USERNAME
sudo usermod -aG sudo $USERNAME
echo "사용자 $USERNAME이 추가되고 sudo 권한이 부여되었습니다."

특징: 사용자 생성, 비밀번호 설정, sudo 권한 부여를 한 번에 처리합니다.
💡 활용 팁: 스크립트를 호출할 때 사용자 이름을 인자로 전달하세요.

./add_user.sh newuser

 


12. 서비스 상태 확인 🔄

특정 서비스가 실행 중인지 빠르게 점검할 수 있습니다.

#!/bin/bash
# 특정 서비스 상태 확인 
SERVICE=$1
systemctl is-active --quiet $SERVICE && echo "$SERVICE이 실행 중입니다" || echo "$SERVICE이 실행 중이 아닙니다"

특징: 지정된 서비스의 실행 여부를 확인합니다.
💡 활용 팁: 서비스가 중지되었을 때 자동 재시작하는 로직을 추가하면 더욱 완벽합니다.

systemctl restart $SERVICE

 


🎯 마무리

이 12가지 Bash 스크립트를 활용하면 DevOps 작업이 한결 수월해집니다.
시스템 업데이트, 모니터링, 백업, 배포 등 자동화
반복적인 작업을 줄여 운영 효율성을 극대화
cron 또는 CI/CD 도구와 결합하여 최적의 워크플로우 구성

🚀 여러분의 환경에 맞게 커스텀하여 더욱 효율적인 DevOps를 시작하세요!

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.