13.자동화 스크립트 및 관리 도구 활용, Bash 스크립트를 이용한 자동화 작업

우분투 서버를 운영하면서 반복적인 작업이 많아지면 이를 자동화하고 관리하기 위해 스크립트를 사용하는 것이 매우 유용합니다. 본 글에서는 Bash 스크립트를 활용하여 다양한 자동화 작업을 수행하는 방법에 대해 자세히 살펴보겠습니다.

1. Bash 스크립트란?

Bash(Bourne Again SHell)는 유닉스 셸의 일종으로, 주로 리눅스 환경에서 사용됩니다. Bash 스크립트는 텍스트 파일 내에 명령어들을 나열한 것으로, 사용자의 명령을 자동으로 실행할 수 있도록 도와줍니다. 이를 통해 수많은 작업을 간단하고 쉽게 수행할 수 있습니다.

2. Bash 스크립트의 기본 구조

기본적인 Bash 스크립트는 다음과 같은 구조를 가집니다:

#!/bin/bash
echo "Hello, World!"

첫 줄의 #!/bin/bash는 이 스크립트가 Bash로 실행되는 것임을 나타냅니다. 이후에는 원하는 명령어를 나열하면 됩니다.

3. Bash 스크립트 작성 및 실행

3.1. 스크립트 파일 생성

스크립트 파일을 생성하려면 터미널에서 다음과 같이 입력합니다:

nano myscript.sh

이 후, 원하는 스크립트를 작성한 다음, Ctrl + OCtrl + X를 눌러 저장하고 종료합니다.

3.2. 실행 권한 부여

스크립트를 실행하기 위해서는 실행 권한을 부여해야 합니다:

chmod +x myscript.sh

3.3. 스크립트 실행

스크립트를 실행하려면 다음과 같은 명령을 입력합니다:

./myscript.sh

4. 반복 작업 자동화

일상적인 관리 작업 중 백업이나 로그 정리와 같은 반복적인 작업은 스크립트를 통해 자동화할 수 있습니다. 아래는 디렉토리 내의 파일을 매일 백업하는 간단한 Bash 스크립트 예제입니다.

#!/bin/bash
# 백업할 디렉토리
SOURCE_DIR="/var/www/html"
# 백업 파일 저장 경로
BACKUP_DIR="/backup"
# 현재 날짜
DATE=$(date +%Y%m%d)

# 백업 실행
tar -czf $BACKUP_DIR/backup-$DATE.tar.gz $SOURCE_DIR
echo "백업이 완료되었습니다: $BACKUP_DIR/backup-$DATE.tar.gz"

이 스크립트는 tar 명령어를 사용하여 지정한 디렉토리를 압축하여 백업을 생성합니다. 이를 매일 cron 작업에 추가하여 자동으로 실행되도록 설정할 수 있습니다.

5. cron을 사용한 스크립트 자동 실행

cron은 정기적으로 작업을 수행할 수 있도록 해주는 리눅스의 작업 스케줄러입니다. cron 작업을 설정하려면 다음과 같은 명령어를 입력합니다:

crontab -e

이 후, 아래와 같은 형식으로 스크립트를 추가합니다:

0 2 * * * /path/to/myscript.sh

위의 예시는 매일 오전 2시에 myscript.sh을 실행하도록 설정합니다.

6. 시스템 모니터링을 위한 자동화

시스템 리소스를 모니터링하고 알림을 보내는 스크립트를 작성하면 서버의 상태를 항상 점검할 수 있습니다. 아래는 현재 CPU 사용량을 체크하고, 특정 수치 이상의 사용량일 경우 관리자에게 이메일을 보내는 예제입니다.

#!/bin/bash
# CPU 사용량 기준 설정
THRESHOLD=80

# 현재 CPU 사용량 가져오기
USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')

# 조건에 따라 알림 전송
if (( $(echo "$USAGE > $THRESHOLD" | bc -l) )); then
  echo "CPU 사용량이 $USAGE%입니다. 확인이 필요합니다." | mail -s "CPU 경고" admin@example.com
fi

위 스크립트는 CPU 사용량이 80%를 초과할 경우 관리자에게 이메일을 전송합니다.

7. 패키지 관리 자동화

서버에서 필수 패키지를 자동으로 업데이트하는 스크립트를 사용할 수 있습니다. 아래 예제는 우분투 서버의 패키지를 업데이트하고 업그레이드하는 간단한 스크립트입니다.

#!/bin/bash
# 시스템 패키지 업데이트
apt update && apt upgrade -y
echo "시스템 패키지가 업데이트되었습니다."

이 스크립트도 cron에 등록하여 정기적으로 실행할 수 있습니다.

8. 사용자 관리 자동화

서버에 새 사용자를 추가하고 관리하는 작업도 스크립트를 통해 자동화할 수 있습니다. 다음은 새로운 사용자를 추가하는 Bash 스크립트의 예제입니다.

#!/bin/bash
# 사용자 추가
read -p "추가할 사용자의 이름: " USERNAME
adduser $USERNAME
echo "사용자가 성공적으로 추가되었습니다: $USERNAME"

이 스크립트를 실행하면 추가할 사용자 이름을 입력하도록 돼 있으며, 해당 사용자가 시스템에 추가됩니다.

9. 서버 로그 모니터링

서버의 로그 파일을 간단하게 모니터링하고 특정 키워드를 포함한 로그를 필터링하여 이메일로 알림을 받을 수 있습니다. 아래 스크립트는 /var/log/syslog에서 ‘error’ 문자열을 찾아 이메일로 전송합니다.

#!/bin/bash
# 로그 파일 경로
LOG_FILE="/var/log/syslog"
# 검색할 키워드
KEYWORD="error"

# 키워드가 포함된 로그 찾기
grep $KEYWORD $LOG_FILE > /tmp/error_logs.txt

# 로그가 발견되면 이메일 발송
if [[ -s /tmp/error_logs.txt ]]; then
  mail -s "로그 오류 발견" admin@example.com < /tmp/error_logs.txt
fi

10. 결론

이와 같이 Bash 스크립트를 활용하여 서버 관리의 많은 작업을 자동화할 수 있으며, 이를 통해 시간과 노력을 절약할 수 있습니다. 시스템 유지보수와 모니터링의 자동화는 안정적인 서버 운영에 큰 도움이 됩니다. 명확한 필요에 따라 스크립트를 작성하고, 주기적으로 검토하여 관리 효율성을 높여보세요.