본문 바로가기

스크립트

[python] 아파치 웹 서버를 시작하고 중지하는 스크립트

반응형

아파치 웹 서버를 시작하고 중지하는 스크립트

스크립트 작성

vim apachev2_restart.py
import subprocess
import time
import pexpect

ssl_password = "pw1234"
apache_command = '/usr/local/apache2/sbin/apachectl'

def stop_apache_server():
    subprocess.run([apache_command, 'stop'])
    print("\nApache 서버를 종료합니다...")

def wait_for_server_shutdown():
    print("\nApache 서버가 완전히 종료될 때까지 대기합니다.")
    start_time = time.time() - 1
    while True:
        apache_status = subprocess.run(['ps', 'aux'], capture_output=True, text=True)
        if '/usr/local/apache2/sbin/httpd' not in apache_status.stdout:
            break
        elapsed_time = int(time.time() - start_time)
        print(f"{elapsed_time}초 대기 중... 아파치 서버를 종료 중입니다.")
        time.sleep(1)
    print("Apache 서버가 성공적으로 종료되었습니다.\n")

def start_apache_server():
    print("Apache 서버를 시작합니다...")
    proc = pexpect.spawn(f'{apache_command} start')
    proc.expect('Enter pass phrase:')
    proc.sendline(ssl_password)
    proc.interact()
    print("\nApache 서버가 시작되었습니다.\n")

# Apache 구성 파일 확인
apache_config_check = subprocess.run([f'{apache_command}', '-t'])
if apache_config_check.returncode == 0:
    stop_apache_server()
    wait_for_server_shutdown()
    start_apache_server()
else:
    print("Apache 구성 파일을 확인하는 중 문제가 발생했습니다.")
    exit(1)

코드의 주요 기능

  1. ssl_password 변수에 SSL 키의 비밀번호를 저장합니다.
  2. apache_command 변수에 Apache 서버의 실행 파일 경로를 저장합니다.
  3. stop_apache_server() 함수는 Apache 서버를 중지합니다. subprocess.run() 함수를 사용하여 apachectl stop 명령을 실행하고 그 결과를 출력합니다.
  4. wait_for_server_shutdown() 함수는 Apache 서버가 완전히 종료될 때까지 기다립니다. Apache 서버의 프로세스가 종료되기까지 1초마다 반복문을 실행하며 ps aux 명령을 사용하여 Apache 서버의 프로세스가 여전히 실행 중인지 확인합니다.
  5. start_apache_server() 함수는 Apache 서버를 시작합니다. pexpect 모듈을 사용하여 SSL 키 입력을 자동화하고 그 결과를 출력합니다.
  6. 메인 코드는 먼저 Apache 구성 파일을 확인하고 문제가 없으면 Apache 서버를 중지하고 종료될 때까지 대기한 후 다시 시작합니다. 문제가 발생하면 적절한 메시지를 출력하고 스크립트를 종료합니다.

스크립트 실행

python apachev2_restart.py

apachev2_restart.py

 

728x90
반응형