내 데비안 서버의 PHP에서 예약된 작업에 문제가 있습니다. 매일 밤 서버 S1에서 서버 S2로 데이터 백업을 보냅니다. 두 서버는 전용 서버이지만 동일한 위치에 있는 호스트는 아닙니다.
백업은 phpseclib에서 Net_SFTP와 함께 전송되는 여러 파일(300MB~5GB)로 구성되며, 네트워크 연결에서 많은 리소스를 사용하지 않도록 0~4시간 사이의 여러 일정 타이머가 포함됩니다.
그리고 매일 밤 전송 중 네트워크 오류가 발생하여 3-4개의 파일에 문제가 발생했습니다(보통 100kms 시간에 도달하면 시간 초과가 발생할 수 있음). 그 후 연결 문제 없이 재시도가 실패했습니다(0.1ms, 네트워크 문제의 경우 매우 빠릅니다). 이는 밤(오늘 3시 14분, 어제 3시 50분) 중 언제든지 발생할 수 있으며, 해당 순간에 전송 중이던 모든 파일은 정확히 동일한 로그를 얻었습니다(첫 번째 시도의 전송 시간만 변경됨). 파일은 결코 동일하지 않습니다. 파일이 3일 연속으로 실패하고 나머지 주에는 완벽하게 작동할 수 있습니다.
네트워크 그래프에서 리소스 소비를 확인할 때 S1과 S2 간의 연결이 처리할 수 있는 최대 대역폭에 도달하지 않았습니다. S2의 호스트에 로그를 요청했을 때 그들은 아무 것도 보지 못했고 무슨 일이 일어나는지 이해하기 위해 S2의 시스템 로그를 보라고 말했습니다.
저는 S1과 S2의 루트이므로 모든 로그를 확인할 수 있지만 어디를 봐야 할지(무엇을 검색해야 할지) 모르겠습니다.
답변1
PHP 오류 로그를 검색한 후 다음과 같은 알림을 발견했습니다.
PHP 알림: yyyy 라인의 /usr/share/php/Net/SSH2.php에서 연결이 조기에 종료되었습니다. PHP 알림: xxxx 라인의 /usr/share/php/Net/SSH2.php에 있는 서버에 의해 연결이 종료되었습니다. PHP 알림: 연결이 종료되었습니다. xxxx 라인의 /usr/share/php/Net/SSH2.php에 있는 서버로
SSH2.php 파일의 xxxx 라인에서 연결 실패 시 $this->fsock이 재설정되지 않고 (!is_resource($this->fsock)) 테스트가 여전히 false인 경우 fsockopen이 완료되지 않음을 발견했습니다. 다시.
Net_SFTP 클래스를 null로 설정하고 재시도 중에 새 Net_SFTP()를 수행했는데 더 이상 이 문제가 발생하지 않습니다(아직 식별할 수 없는 네트워크 끊김이 있지만 현재 재시도는 작동합니다).