반응형
아파치 웹 서버를 시작하고 중지하는 스크립트
스크립트 작성
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)
코드의 주요 기능
- ssl_password 변수에 SSL 키의 비밀번호를 저장합니다.
- apache_command 변수에 Apache 서버의 실행 파일 경로를 저장합니다.
- stop_apache_server() 함수는 Apache 서버를 중지합니다. subprocess.run() 함수를 사용하여 apachectl stop 명령을 실행하고 그 결과를 출력합니다.
- wait_for_server_shutdown() 함수는 Apache 서버가 완전히 종료될 때까지 기다립니다. Apache 서버의 프로세스가 종료되기까지 1초마다 반복문을 실행하며 ps aux 명령을 사용하여 Apache 서버의 프로세스가 여전히 실행 중인지 확인합니다.
- start_apache_server() 함수는 Apache 서버를 시작합니다. pexpect 모듈을 사용하여 SSL 키 입력을 자동화하고 그 결과를 출력합니다.
- 메인 코드는 먼저 Apache 구성 파일을 확인하고 문제가 없으면 Apache 서버를 중지하고 종료될 때까지 대기한 후 다시 시작합니다. 문제가 발생하면 적절한 메시지를 출력하고 스크립트를 종료합니다.
스크립트 실행
python apachev2_restart.py
728x90
반응형
'스크립트' 카테고리의 다른 글
[python] 환경 변수를 .env 파일에서 로드하는 코드를 작성 (0) | 2024.05.14 |
---|---|
[python] distro 모듈을 사용하여 운영체제 정보 확인 예제 (0) | 2024.05.13 |
os 모듈과 subprocess 모듈의 차이점 (0) | 2024.05.02 |
SSH 공개 키를 복사하는 스크립트 (0) | 2024.02.05 |
ICMP Ping 테스트를 수행하는 Python 스크립트 (0) | 2024.01.14 |