[파이썬] 리눅스 서버 자동화와 성능 튜닝 스크립트

리눅스 서버의 관리와 운영은 많은 시간과 노력이 필요하지만, 자동화와 성능 튜닝 스크립트를 사용하면 이러한 작업을 효율적으로 수행할 수 있습니다. 이 블로그 포스트에서는 파이썬을 사용하여 리눅스 서버 자동화와 성능 튜닝을 위한 스크립트를 작성하는 방법에 대해 알아보겠습니다.

1. 서버 자동화 스크립트

a. 패키지 자동 설치 스크립트

새로운 리눅스 서버를 구성할 때, 많은 패키지를 설치해야 할 수 있습니다. 이러한 패키지들을 일일히 설치하는 대신, 자동화 스크립트를 작성하여 한 번에 설치하도록 할 수 있습니다.

아래 예제는 apt-get 명령어를 사용하여 패키지를 자동으로 설치하는 스크립트입니다.

import subprocess

packages = ["package1", "package2", "package3"]

for package in packages:
    subprocess.call(["apt-get", "install", package, "-y"])

위의 예제에서, packages 리스트에 설치할 패키지들을 추가하고 apt-get install 명령어를 사용하여 각 패키지를 설치합니다. -y 옵션은 사용자에게 확인 메시지를 띄우지 않고 자동으로 설치를 진행하도록 합니다.

b. 서버 설정 자동화 스크립트

서버를 운영하다보면 특정 설정 파일을 항상 변경해야 할 수도 있습니다. 이러한 설정 파일을 자동으로 변경하는 스크립트를 작성하여 시간과 노력을 절약할 수 있습니다.

아래 예제는 /etc/ssh/sshd_config 파일에서 PermitRootLogin 옵션을 변경하는 스크립트입니다.

import fileinput

for line in fileinput.input('/etc/ssh/sshd_config', inplace=True):
    if 'PermitRootLogin' in line:
        print(line.replace('PermitRootLogin yes', 'PermitRootLogin no'), end='')
    else:
        print(line, end='')

위의 예제에서, fileinput 모듈을 사용하여 파일을 열고, PermitRootLogin 옵션이 있는 줄을 찾아 변경합니다. replace() 함수를 사용하여 yesno로 변경하고 print() 함수를 사용하여 변경된 내용을 파일에 씁니다. end=''는 줄바꿈 문자를 삭제하여 파일의 내용을 올바르게 유지합니다.

2. 서버 성능 튜닝 스크립트

a. 자원 모니터링 스크립트

서버의 성능 튜닝은 성능 문제를 식별하고 최적화하는 작업을 의미합니다. 이를 위해 서버의 자원 사용량을 모니터링하고 로그를 기록하는 스크립트를 작성할 수 있습니다.

아래 예제는 psutil 패키지를 사용하여 CPU, 메모리, 디스크, 네트워크의 사용량을 모니터링하는 스크립트입니다.

import psutil

cpu_percent = psutil.cpu_percent(interval=1)
memory_usage = psutil.virtual_memory().percent
disk_usage = psutil.disk_usage('/').percent
network_usage = psutil.net_io_counters().bytes_sent + psutil.net_io_counters().bytes_recv

# 로그 파일에 기록하기
with open('/var/log/performance.log', 'a') as file:
    file.write(f"CPU: {cpu_percent}%\n")
    file.write(f"Memory: {memory_usage}%\n")
    file.write(f"Disk: {disk_usage}%\n")
    file.write(f"Network: {network_usage}bytes\n")

위의 예제에서, psutil 패키지를 사용하여 CPU 사용량, 메모리 사용량, 디스크 사용량, 네트워크 사용량을 가져옵니다. 이러한 정보를 로그 파일에 기록합니다.

b. 프로세스 자동 종료 스크립트

서버에서 실행되는 프로세스들 중에서 정상적으로 종료되지 않는 경우가 발생할 수 있습니다. 이러한 프로세스들을 자동으로 종료하는 스크립트를 작성하여 서버의 성능을 향상시킬 수 있습니다.

아래 예제는 subprocess 모듈을 사용하여 특정 프로세스를 종료하는 스크립트입니다.

import subprocess

process_name = "myprocess"

# 프로세스 종료하기
subprocess.call(["pkill", process_name])

위의 예제에서, subprocess.call() 함수를 사용하여 pkill 명령어를 실행하여 특정 프로세스를 종료합니다. process_name 변수에 종료할 프로세스의 이름을 지정하면 해당 프로세스를 종료할 수 있습니다.

마무리

리눅스 서버의 자동화와 성능 튜닝은 서버 운영에 필수적인 작업입니다. 위에서 소개한 스크립트들을 사용하여 시스템 관리 작업을 자동화하고, 서버 성능을 향상시킬 수 있습니다. 파이썬을 사용하여 스크립트를 작성하면 간편하고 효율적인 서버 운영이 가능합니다.

이 포스트에서는 리눅스 서버 자동화와 성능 튜닝을 위한 스크립트 작성 방법을 소개했습니다. 이제 여러분은 자신의 서버 운영을 자동화하고 성능을 향상시키기 위해 파이썬 스크립팅을 시작할 수 있습니다. Happy scripting!