본문 바로가기
인공지능 연구실

리눅스 서버 리부팅 자동화 하기

by 싸이원 2025. 2. 10.
반응형

매일 새벽 4시에 리부팅 요청이 있을 경우 자동으로 리눅스 서버 리부팅 하기

아래 코드로 스크립트 파일을 만든다

 

#!/bin/bash

# 자동 리부팅 체크 스크립트
# crontab에 등록하여 매일 새벽 4시에 실행

# 리부팅이 필요한지 확인하는 함수
check_reboot_required() {
    # /var/run/reboot-required 파일 확인
    if [ -f /var/run/reboot-required ]; then
        return 0
    fi
    
    # MOTD 메시지에서 재시작 필요 문구 확인
    if grep -q "System restart required" /run/motd.dynamic 2>/dev/null || \
       grep -q "System restart required" /etc/motd 2>/dev/null; then
        return 0
    fi
    
    return 1  # 리부팅 불필요
}

# 현재 시스템 부하 확인
check_system_load() {
    load=$(cat /proc/loadavg | awk '{print $1}')
    # 시스템 부하가 2 미만일 때만 리부팅 진행
    if (( $(echo "$load < 2" | bc -l) )); then
        return 0
    else
        return 1
    fi
}

# 메인 로직
main() {
    # 로그 파일 설정
    LOG_FILE="/var/log/auto_reboot.log"
    
    # 로그 시작
    echo "$(date): 자동 리부팅 체크 시작" >> "$LOG_FILE"
    
    # 리부팅이 필요한지 확인
    if check_reboot_required; then
        echo "$(date): 리부팅이 필요한 상태 감지됨" >> "$LOG_FILE"
        
        # 시스템 부하 확인
        if check_system_load; then
            echo "$(date): 시스템 부하 정상, 리부팅 시작" >> "$LOG_FILE"
            # 5분 후 리부팅 예약
            /sbin/shutdown -r +5 "시스템 자동 리부팅이 5분 후 실행됩니다."
        else
            echo "$(date): 시스템 부하가 높아 리부팅 연기됨" >> "$LOG_FILE"
        fi
    else
        echo "$(date): 리부팅이 필요하지 않음" >> "$LOG_FILE"
    fi
}

# 스크립트 실행
main

 

 

  1. 스크립트 생성:
bash
Copy
sudo nano /usr/local/sbin/auto_reboot.sh
  1. 실행 권한 부여:
bash
Copy
sudo chmod +x /usr/local/sbin/auto_reboot.sh
  1. crontab에 등록:
bash
Copy
sudo crontab -e

다음 줄 추가:

Copy
0 4 * * * /usr/local/sbin/auto_reboot.sh
반응형