서버에서 클라이언트로 네트워크 연결 핑 보내기

서버에서 클라이언트로 네트워크 연결 핑 보내기

그래서 저는 서버와 클라이언트 컴퓨터를 가지고 있고 그것들을 항상 네트워크에서 실행해야 합니다. 때로는 WLAN네트워크에서 클라이언트 시스템을 실행하고 있기 때문에 다시 시작해야 할 때도 있습니다. 내 서버와 클라이언트 사이에 활성 연결이 있음을 보장하고 싶기 때문에 클라이언트 시스템이 활성화되어 있거나 본질적으로 응답하는지 주기적으로 확인해야 합니다.

내 질문

클라이언트가 5분 이내에 내 서버로부터 그러한 연결 핑을 수신하지 못하고, 네트워크가 다시 시작되었지만 여전히 내 서버로부터 그러한 패킷을 수신하지 못하는 경우, 먼저 네트워크를 다시 시작해야 하며 그러면 전체 Linux 시스템이 다시 시작됩니다. .

아이디어는 내 서버가 감시자 역할을 하여 매분 내 클라이언트에 연결 핑을 보내고, 클라이언트가 5분 이내에 그러한 핑을 받지 못하면 자체적으로 다시 초기화를 시도하는 것입니다.

내가 시도한 것

내 클라이언트에서 내 서버를 핑할 수 있는지 확인하기 위해 이 로컬 스크립트를 사용해 보았지만 작동하지 않으므로 내 서버 측에서 확인하고 싶습니다.

#!/bin/bash

test_ping=`ping -c 4 SERVER_ADDR | tail -1| awk '{print $4}' | cut -d '/' -f 2`'>'1000 | bc -l
test_host=`netstat -nr | grep "UG" | awk '{ print $2}' | xargs ping -q -w 1 -c 1 | grep "received" | awk '{ print $4 }'`
if [ "$test_host" == "0" ] || [ -z "$test_host" ] || [ "$test_ping" == "1"] ;
then
    echo "restarting network at $(date '+%A %W %Y %X')" >> /path/to/my/logs.file
    service networking restart

    sleep 60
    test_ping=`ping -c 4 SERVER_ADDR | tail -1| awk '{print $4}' | cut -d '/' -f 2`'>'1000 | bc -l
    test_host=`netstat -nr | grep "UG" | awk '{ print $2}' | xargs ping -q -w 1 -c 1 | grep "received" | awk '{ print $4 }'`
    if [ "$test_host" == "0" ] || [ -z "$test_host" ] || [ "$test_ping" == "1"] ;
    then
        echo "rebooting at $(date '+%A %W %Y %X')" >> /path/to/my/logs.file
        reboot
    fi
fi

Linux에서 이를 달성하는 방법에 대한 아이디어가 있습니까?

답변1

ssh클라이언트에 임시 파일을 생성하여 문제를 "해결"했습니다 .

ssh -o ConnectTimeout=5 USER@CLIENT_HOST '/usr/bin/touch /tmp/watchdog.hook' 

이것은 다음 cron 명령을 사용하여 내 서버에서 매분마다 cron에 의해 호출됩니다.

*  *    * * *   /path/to/script/watchdog-server.sh

클라이언트 측에서는 임시 파일을 삭제하려고 시도하고 실패하면 카운터가 증가하고 3이면 네트워크를 다시 시작하고 5이면 컴퓨터를 다시 시작합니다. 성공하면 카운터가 재설정됩니다.

counter_file="/tmp/watchdog.counter"
if [ ! -f "$counter_file" ]; then
    printf '0\n' >"$counter_file"
fi
counter_curr=$(< "$counter_file")
rm /tmp/watchdog.hook
if [ $? -eq 0 ]; then
    counter_curr=0
else
    (( ++counter_curr ))
    if [ "$counter_curr" -eq 3 ]; then
        echo "No network connection, restarting wlan0 at $(date)"
        /sbin/ifdown 'wlan0'
        sleep 5
        /sbin/ifup --force 'wlan0'
    elif [ "$counter_curr" -ge 5 ]; then
        echo "No network connection, rebooting machine at $(date)"
        /sbin/shutdown -r now
    fi
fi
printf '%s\n' "$counter_curr" >"$counter_file"

클라이언트에서 스크립트를 실행하기 전에 30초를 기다려야 하므로 cron에 다음을 추가합니다.

*   * * *   * ( sleep 30 ; /path/to/script/watchdog-client.sh )

관련 정보