Profile picture

[Shell Script] 리눅스 서버 자동화 스크립트

JaehyoJJAng2024년 03월 25일

개요

리눅스 서버에서 반복적인 관리 작업을 자동화하는 배쉬 스크립트를 작성.

해당 스크립트의 경우 백업, 로그 관리, 패치 관리, 사용자 관리 등의 작업을 포함함.


시나리오

회사에서 운용 중인 리눅스 서버는 매일 로그 파일을 생성하며, 시스템 관리자는 매일 이러한 로그 파일을 백업하고 오래된 로그를 삭제해야 한다.

또한, 시스템 패치가 주기적으로 필요하고, 새로운 직원이 입사할 때마다 사용자 계정을 생성해줘야 한다.

이 모든 작업을 수동으로 수행하는 대신, 관리자는 이 작업들을 자동화하여 생산성을 높이고, 휴먼 에러를 줄이려고 한다.


자동화해야 할 작업 목록

  • 1. 로그 백업 및 정리
    • 매일 특정 디렉토리에 있는 로그 파일을 백업 디렉토리 또는 백업 서버로 이동하고, 30일 이상된 백업 파일은 삭제.
  • 2. 서버 패치 관리
    • 매주 일요일 새벽에 자동으로 시스템 업데이트를 확인하고, 필요한 패치를 설치.
  • 3. 사용자 계정 생성 및 초기 설정
    • 새로운 직원이 입사할 때, 자동으로 사용자 계정을 생성해고 초기 디렉토리 구조와 권한을 설정

로그 백업 및 정리 스크립트

#!/usr/bin/bash

# 설정 변수
logDIR="/var/log"
backupDIR="/mnt/backup"
RETENTION_DAYS=30

# 로그 백업 디렉토리 확인 및 생성
if [[ ! -d "$backupDIR" ]]; then
  mkdir -p "$backupDIR"
fi

# 로그 파일 백업
for log_file in "$logDIR/*.log"; do
  cp "$log_file" "$backupDIR"
done

# 오래된 백업 파일 삭제
find "$backupDIR" -type f -mtime +$RETENTION_DAYS -exec rm {} \;

echo "로그 백업 및 정리 완료: $(date)"

서버 패치 관리 스크립트

#!/usr/bin/bash

echo "시스템 업데이트를 시작합니다: $(date)"

# 시스템 업데이트
if [[ -f /etc/os-release ]]; then
  sudo apt-get update -y
  sudo apt-get upgrade -y
fi

# 자동 재부팅 (필요시)
if [[ -f /var/run/reboot-required ]]; then
  echo "재부팅이 필요합니다. 시스템을 재부팅합니다"
  sudo reboot
else
  echo "업데이트 완료!"
fi

echo "서버 패치 완료!" 

사용자 계정 생성 및 초기 설정 스크립트

#!/usr/bin/bash

# 사용자가 인수로 제공한 사용자 이름 확인
USERNAME=''
while [[ $# -gt 0 ]]; do
  case "$1" in
    -u | --user)
      USERNAME="$2"
      shift 2
      ;;
    *)
      echo "Unknown argument : $1"
      exit 1
      ;;
  esac
done
USER_HOME="/home/$USERNAME"

# 사용자 생성 및 홈 디렉토리 생성
sudo useradd -m -s /bin/bash "$USERNAME"

# 초기 디렉토리 구조 생성
mkdir -p "$USER_HOME"/{Documents,Downloads,Projects}

# 권한 설정
sudo chown -R "$USERNAME":"$USERNAME" "$USER_HOME"
chmod 700 "$USER_HOME"

echo "새 사용자 $USERNAME 계정이 생성되었음."

Loading script...