인공지능 연구실

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

싸이원 2025. 2. 10. 10:43
반응형

매일 새벽 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
반응형