[파이썬] 리눅스 서버 관리 스크립트 작성

리눅스 서버 관리는 복잡하고 시간이 많이 소요되는 작업입니다. 하지만 파이썬을 사용하여 스크립트를 작성하면 서버 관리 작업을 자동화하고 효율적으로 처리할 수 있습니다. 이번 블로그 포스트에서는 리눅스 서버 관리에 유용한 몇 가지 스크립트를 소개하고자 합니다.

파일 백업 스크립트

리눅스 서버에서 중요한 파일을 정기적으로 백업하는 것은 매우 중요한 작업입니다. 간단한 파일 백업 스크립트를 작성해보겠습니다. 이 스크립트는 지정된 폴더의 모든 파일을 특정 위치에 백업합니다.

import os
import shutil
from datetime import datetime

def backup_files(source_folder, destination_folder):
    # 현재 시간을 이용하여 백업 폴더명 생성
    current_time = datetime.now().strftime("%Y%m%d%H%M%S")
    backup_folder = os.path.join(destination_folder, current_time)

    # 백업 폴더 생성
    os.makedirs(backup_folder)

    # 원본 폴더의 파일들을 백업 폴더로 복사
    for root, dirs, files in os.walk(source_folder):
        for file in files:
            source_file = os.path.join(root, file)
            dest_file = os.path.join(backup_folder, file)
            shutil.copy2(source_file, dest_file)

    print("파일 백업이 완료되었습니다.")

# 사용 예시
source_folder = "/home/user/files"
destination_folder = "/backup"

backup_files(source_folder, destination_folder)

위의 코드는 shutil 모듈을 사용하여 파일을 복사하고, datetime 모듈을 사용하여 현재 시간을 구해서 백업 폴더명으로 사용합니다. os.makedirs 함수를 사용하여 백업 폴더를 생성한 후, os.walk 함수를 사용하여 원본 폴더의 파일들을 순회하며 백업 폴더로 복사합니다.

시스템 리소스 모니터링 스크립트

서버 상태를 모니터링하는 스크립트는 서버 운영 관리에 아주 유용합니다. 아래의 예제는 현재 CPU, 메모리, 디스크 사용량을 모니터링하는 스크립트입니다.

import psutil

def monitor_system_resources():
    # CPU 사용량 백분율 가져오기
    cpu_usage = psutil.cpu_percent(interval=1)

    # 메모리 사용량 가져오기
    memory = psutil.virtual_memory()
    memory_usage = memory.used / memory.total * 100

    # 디스크 사용량 가져오기
    disk = psutil.disk_usage('/')
    disk_usage = disk.used / disk.total * 100

    print(f'CPU 사용량: {cpu_usage}%')
    print(f'메모리 사용량: {memory_usage}%')
    print(f'디스크 사용량: {disk_usage}%')

# 사용 예시
monitor_system_resources()

위의 코드는 psutil 모듈을 사용하여 시스템 리소스 정보를 가져옵니다. cpu_percent 함수를 사용하여 CPU 사용량을 백분율로 얻고, virtual_memory 함수를 사용하여 메모리 정보를 얻습니다. 마지막으로 disk_usage 함수를 사용하여 디스크 사용량을 얻습니다.

로그 파일 모니터링 스크립트

서버에서 로그 파일을 실시간으로 모니터링하는 스크립트도 매우 유용합니다. 아래의 예제는 특정 로그 파일의 내용을 계속해서 감시하는 스크립트입니다.

import time

def monitor_log_file(log_file):
    # 파일의 마지막 위치 기록
    last_position = 0

    while True:
        # 파일 열기
        with open(log_file, 'r') as file:
            # 파일 끝으로 이동
            file.seek(last_position)

            # 파일 끝까지 읽기
            for line in file.readlines():
                print(line.strip())

            # 파일 위치 저장
            last_position = file.tell()

        # 1초마다 체크
        time.sleep(1)

# 사용 예시
log_file = "/var/log/syslog"
monitor_log_file(log_file)

위의 코드는 open 함수를 사용하여 로그 파일을 열고, seek 함수를 사용하여 파일의 마지막 위치로 이동합니다. 그 후 readlines 함수를 사용하여 파일의 마지막 위치에서부터 새로 추가된 부분을 읽습니다. 이를 반복하여 로그 파일을 지속적으로 모니터링합니다.

결론

위의 예제를 통해 파이썬을 사용하여 리눅스 서버 관리를 자동화하는 스크립트를 작성하는 방법을 살펴보았습니다. 파일 백업, 시스템 리소스 모니터링, 로그 파일 모니터링 등 다양한 작업을 스크립트로 자동화하면 서버 관리 작업을 효율적으로 처리할 수 있습니다. 파이썬을 이용하여 자신의 서버 환경에 맞는 스크립트를 작성해보세요!