인터넷 연결이 끊어질 때 스크립트를 어떻게 실행합니까?

인터넷 연결이 끊어질 때 스크립트를 어떻게 실행합니까?

나는 wvdialSIM 카드 모뎀과 함께 (PPP 다이얼러)를 사용하고 있는데 때때로 이 연결이 서버 측에서 재설정됩니다. ifconfiggrep을 통해 다운로드한 양의 데이터를 가져와 어딘가에 저장하는 스크립트를 실행하고 싶습니다 . 분명히 이 작업은 연결이 살아 있는 동안 수행되어야 합니다. 그렇지 않으면 연결이 wvdial끊어지면 즉시 다시 연결하도록 구성되어 있으므로 몇 초 후에 아무것도 얻지 못하거나 새 연결의 값을 얻지 못합니다. 어떤 아이디어가 있나요?

편집하다:

물론, ifconfig1~2초마다 출력을 수집할 수 있지만 이는 끔찍한 해결 방법이며 고려할 가치조차 없습니다. 내가 상상할 수 있는 가장 좋은 시나리오는 어떻게든 ifconfig"리셋 카운트"를 나타내는 신호를 캡처하는 것입니다 => 잠시 동안 신호를 일시 중지합니다 => 내 스크립트를 실행합니다 => 신호를 잠금 해제합니다. 그러나 ifconfig아마도 특정 인터페이스가 사라지면 이전 결과를 파일에 덤프하도록 자체 구성하는 것과 같이 내가 모르는 다른 가능성이 있을 수도 있습니다 . 또 다른 옵션은 다른 곳에서 출력을 가져오지 않는 것입니다 ifconfig. 그런데 입력 소스가 무엇인가요 ifconfig?

답변1

while(1) 루프 내에서 원하는 내용을 정확하게 기록하고 마지막에 수면 호출(또는 원하는 수면 길이)을 호출하는 자체 쉘 스크립트를 작성할 수 있습니다. 이 같은:

function get_logname
  {
  echo `date +'%F-%H-%M-%S'`.log
  }

function am_online
  {
   ping -c 1 google.com  >/dev/null 2>&1
   echo $?
  }

function update_logfile
  {
  echo "YOUR DATA TO BE LOGGED" >> $1 
  }

  CUR_LOG=`get_logname`
  echo $CUR_LOG
  while [ 1 ]; do
        if [ "`am_online`" -eq 0 ]; then
           update_logfile $CUR_LOG
        else
           echo "we are offline!"
       CUR_LOG=`get_logname`
        fi

        sleep 1
  done

온라인 상태에서는 매초마다 로그 파일에 기록됩니다(>> 새 데이터를 추가하고 > 새 데이터만 포함하도록 파일을 다시 작성합니다). 오프라인 상태에서는 다음 로그 파일의 새 이름을 계속 선택하고 아무것도 기록하지 않습니다. 온라인으로 돌아오면 마지막으로 선택한 로그 파일 이름을 사용하여 새 로그 파일 로깅이 시작되고 다른 로그 파일은 변경되지 않은 상태로 유지됩니다.

이것은 당신에게 도움이 될 것입니다. 온라인에서 찾은 모든 코드와 마찬가지로 코드를 테스트하여 원하는 대로 작동하는지, 어떤 문제도 발생하지 않는지 확인하는 것은 귀하의 책임입니다. 특히 이런 경우에는 로그 파일의 크기가 빠르게 증가할 수 있으며, 자주 오프라인 상태가 되면 로그 파일이 잔뜩 쌓일 수 있다는 점을 염두에 두시기 바랍니다.

"my_internet_logging_script.sh"와 같은 파일에 저장하고 다음을 실행합니다.

sh my_internet_logging_script.sh

로그 파일을 표시할(또는 그에 따라 스크립트를 편집) 디렉터리에 표시합니다.

답변2

마지막 질문에 답하려면 다음을 ifconfig읽어보세요 . 데이터 전송을 위한 다양한 인터페이스에 대한 정보는 첫 번째 파일에서 찾을 수 있습니다./proc/net/dev/proc/net/if_inet6

/proc파일이 하드 디스크에 저장되지 않고 읽을 때마다 커널에 의해 생성되므로 파일에 대한 액세스가 매우 빠른 특수 파일 시스템입니다. 또한 명령이 필요하지 않은 다른 작업을 수행하므로 직접 구문 분석은 /proc/net/dev구문 분석보다 약간 더 빠릅니다.ifconfig

대략적인 아이디어를 제공하기 위해 여기에 1000회 반복에 대한 시간이 있습니다. ifconfig또는 cat /proc/net/dev(반복이 zsh명령입니다):

$ time (repeat 1000 ifconfig > /dev/null)
1.14s user 3.85s system 90% cpu 5.513 total
$ time (repeat 1000 cat /proc/net/dev > /dev/null)
0.57s user 2.44s system 70% cpu 4.282 tota

물론 아직 분석은 /proc/net/dev되지 않았지만좋아요그러나 매초마다 출력을 구문 분석하기로 결정하면 최소한 20-30%의 속도 향상을 얻을 수 있습니다.

관련 정보