PHP CLI에서 네트워크 연결(VPN)이 예기치 않게 끊어졌는지 어떻게 감지해야 합니까?

PHP CLI에서 네트워크 연결(VPN)이 예기치 않게 끊어졌는지 어떻게 감지해야 합니까?

상황: 컴퓨터 전원을 켤 때마다 영구 PHP CLI 스크립트가 실행됩니다. 매분마다 각각 일부 작업을 병렬로 수행하는 여러 하위 프로세스가 시작됩니다. (메인 스크립트에서 루틴을 하나씩 실행하면 종종 1분보다 훨씬 오래 걸리고 시스템이 불안정해지기 때문에 이렇게 합니다.)

대부분의 경우 이는 의도한 대로 완벽하게 작동합니다(모든 종류의 미세 조정을 거친 후). 그러나 지금까지 설명할 수 없는 상황이 있습니다.

때때로 내 VPN(OpenVPN)에 대한 네트워크 연결이 예기치 않게 중단됩니다. 최근에는 거의 매일 그런 일이 일어나고 있습니다. 이런 일이 발생할 때마다 내 "하위 스크립트"(주로 네트워크 관련 작업을 수행함)가 여러 번 연결을 재시도하려고 시도하면서 멈춥니다(그리고 매번 시간 초과를 기다리는 등). 최종 결과는 이러한 스크립트의 복사본이 점점 더 많이 쌓이고, 결국 내가 돌아와서 각 하위 스크립트의 30개 복사본이 동시에 실행되고 있음을 알게 되었을 때 내 컴퓨터가 무릎을 꿇게 만드는 것입니다. 네트워크가 다운된 것을 감지할 수 없기 때문에 거의 영원한 루프입니다.

(예, 시간 초과/연결 시간 초과 등에 대한 cURL 옵션이 있습니다.)

따라서 "오프라인성"을 감지할 수 있기를 바랍니다. 이것은 처음에 상상했던 것보다 훨씬 더 어려운 일이었습니다. Windows의 명령줄에서 이 작업을 수행할 수 있는 확실한 방법이 있습니까? 물론 내 시스템은 완전한 크로스 플랫폼으로 개발되었으므로 Linux와 macOS에 대해서도 알고 싶지만 주로 Windows를 사용하기 때문에 이것이 지금 개인적으로 가장 중요합니다.

기본적으로 0 또는 1을 반환하는 "isthatlittlenetworkiconinthescreenlitgreen.exe"를 실행하고 싶습니다.

(내장 도구 사용)

누군가가 이를 확인하기 위한 건전한 크로스 플랫폼 아이디어를 갖고 있기를 바랍니다. 아마도 PHP 자체에도 이 기능이 내장되어 있지 않을까요? (그래 맞아...)

답변1

VPN 연결이 여전히 활성 상태인지 테스트하려면 publicIP가 어떻게 표시되는지 확인하는 것과 같은 간단한 작업을 수행할 수 있습니다.

<?php

function connectedtoVPN() {
  $localPubIP = "123.456.789.012";
  $result = `curl icanhazip.com`;
  if ($result == $localPubIP) {
    // not connected to VPN
    return false;
  }

  // connected to VPN
  // (or my public IP has changed!)
  return true;
}

하지만 그러려면 컴퓨터에 고정 공용 IP가 있어야 합니다.

인터넷에 연결되어 있는지 확인하고 싶다면 google.com이나 다른 호스트에 대해 ping이나 컬을 수행하고 결과를 구문 분석하여 연결이 성공했는지 확인할 수 있습니다.

관련 정보