본문 바로가기

스크립트

리눅스 서버 주요 서비스 자동 점검 및 재시작 스크립트

반응형

리눅스 서버 주요 서비스 자동 점검 및 재시작 스크립트

운영 중인 Linux 서버에서는 SSH, 웹서버, DB, 메일, FTP 서비스가 비정상 종료되는 상황이 발생할 수 있습니다. 이럴 때 주기적으로 서비스를 점검하고, 장애 발생 시 자동으로 재시작하도록 구성하면 운영 안정성을 높일 수 있습니다.

 

스크립트 작성

vim service_check.sh
#!/bin/bash

# ==========================================
# 주요 서비스 상태 점검 및 자동 재시작 스크립트
# Author : 운영 자동화 예제
# ==========================================

NOWDATE=$(date '+%Y-%m-%d %H:%M:%S')
HOSTNAME=$(hostname)

LOG_FILE="/var/log/service_check.log"
MAIL_TO="admin@example.com"

# 점검 대상 서비스 목록
SERVICES=(
  ssh
  nginx
  mysql
  postfix
  vsftpd
)

# 로그 함수
write_log() {
    echo "[$NOWDATE] $1" >> $LOG_FILE
}

# 메일 알림 함수 (mailx 설치 필요)
send_alert() {
    SUBJECT="[ALERT] $HOSTNAME 서비스 장애 복구"
    echo "$1" | mail -s "$SUBJECT" $MAIL_TO
}

# 서비스 점검
check_service() {

    SERVICE_NAME=$1

    systemctl is-active --quiet $SERVICE_NAME

    if [ $? -ne 0 ]; then

        write_log "$SERVICE_NAME 서비스 비정상 상태"

        systemctl restart $SERVICE_NAME
        sleep 3

        systemctl is-active --quiet $SERVICE_NAME

        if [ $? -eq 0 ]; then
            MSG="$SERVICE_NAME 서비스 재시작 성공"
            write_log "$MSG"
            send_alert "$MSG"
        else
            MSG="$SERVICE_NAME 서비스 재시작 실패"
            write_log "$MSG"
            send_alert "$MSG"
        fi
    fi
}

# 메인 루프
for SERVICE in "${SERVICES[@]}"
do
    check_service $SERVICE
done

실행 권한 부여

chmod +x service_check.sh

수동 실행

./service_check.sh

Cron 등록 (1분마다 점검)

crontab -e
* * * * * /root/scripts/service_check.sh >/dev/null 2>&1

로그 확인

tail -f /var/log/service_check.log

메일 발송 기능 사용 시

sudo apt install -y mailutils

또는

sudo yum install -y mailx

 

728x90
반응형