테스트 조건에 따라 시작 스크립트의 실행을 올바르게 지연하려면 어떻게 해야 합니까?

테스트 조건에 따라 시작 스크립트의 실행을 올바르게 지연하려면 어떻게 해야 합니까?

ntp(링크뿐만 아니라) 실제 인터넷 연결이 있을 때만 서비스를 시작하면 됩니다. 조건이 충족되지 않으면(보통 네트워크 장치를 사용할 수 있을 때까지) 일부 시작 스크립트가 지연되는 것을 발견한 것 같습니다.

시작 스크립트에서 이를 올바르게 수행하려면 어떻게 해야 합니까?

  • 시작 스크립트가 검사를 실행합니다(다른 스크립트).
  • 결과에 따라 실제로 서비스를 시작하거나 잠시 지연한 후 다시 검사를 수행합니다.

Bash 조건을 상상할 수 있지만 while백그라운드로 들어가기 전에 스크립트가 차단되며 시작 메커니즘과 환경에 기본 제공되는 솔루션이 없는지 확인하고 싶습니다.

참고: 이는 후속 조치입니다.시작 스크립트 종속성에 대한 이전 질문.

답변1

부팅 시 스크립트를 시작하고 네트워크가 나타날 때까지 기다리는 것은 원하는 작업, 즉 네트워크가 나타날 때 무언가를 실행하는 이상하고 복잡한 방법이 될 것입니다.

네트워크 시작 시 작업을 수행하려면 시스템 시작 스크립트가 아닌 네트워크 시작 스크립트에 추가하세요. Systemd와 Upstart는 이를 통합하지만 Debian wheezy는 시작(및 실행 수준 변경)만 관리하는 전통적인 init 시스템을 사용합니다.

Debian 및 그 파생 제품에서 실행할 스크립트를 배치할 수 있습니다.인터페이스가 나타나면존재하다 /etc/network/if-up.d/.


네트워크 연결 대신 인터넷 연결을 모니터링해야 하는 경우 다음을 수행해야 합니다.

  1. 네트워크 연결 정의를 선택합니다. 인터넷은 중앙 집중화되어 있지 않습니다. 특정 호스트가 특정 요청에 응답하는지 여부만 확인할 수 있습니다. 이는 방화벽의 영향을 받을 수 있습니다.
  2. 대응하기 전에 네트워크가 얼마나 오랫동안 다운될 수 있는지 결정하십시오. 그것은 당신이 달성하려는 것에 달려 있습니다. 너무 짧은 시간 간격을 선택하면 단순한 패킷 손실로 인해 네트워크가 다운되었다고 잘못 생각할 수 있습니다. 간격을 너무 길게 선택하면 실패한 연결을 빠르게 감지할 수 없습니다.

이를 달성할 수 있는 마법 같은 방법은 없습니다. 가장 확실한 방법은 접촉 시도 사이에 (2.)에 대해 선택한 시간 동안 휴면하는 루프에서 (1.)에 대해 선택한 서버에 연결하는 것입니다. 이는 연결이 시작된 시기를 감지하는 유일한 방법입니다. TCP 연결을 열고 수시로 열려 있는 연결에서 패킷을 보내는 등 연결 손실을 관찰하는 다른 방법이 있습니다.

세 가지 가능한 방법이 있습니다:

  • 주기적으로 연결을 테스트하고 상태를 파일에 저장하며 상태가 변경되면 반응하는 crontab을 배치합니다.
  • 쉘(또는 기타) 스크립트를 영원히 실행하고 연결 테스트를 영원히 반복하도록 하십시오.
  • 더 고급 기능을 사용하세요모니터링 도구.

관련 정보