Bei der SFTP-Sicherungsaufgabe ist ein Netzwerkproblem aufgetreten und die Verbindung kann danach unter Debian nicht wiederhergestellt werden.

Bei der SFTP-Sicherungsaufgabe ist ein Netzwerkproblem aufgetreten und die Verbindung kann danach unter Debian nicht wiederhergestellt werden.

Ich habe ein Problem mit einer geplanten Aufgabe in PHP auf meinem Debian-Server. Jede Nacht sende ich eine Datensicherung von Server S1 an Server S2. Die beiden Server sind dedizierte Server, werden aber nicht am selben Standort gehostet.

Das Backup besteht aus mehreren Dateien (von 300 MB bis 5 GB), die mit Net_SFTP von phpseclib gesendet werden, mit mehreren Zeitplänen zwischen 0 und 4 Stunden, um nicht zu viele Ressourcen der Netzwerkverbindung zu beanspruchen.

Und jede Nacht habe ich ein Problem mit 3-4 Dateien, mit einem Netzwerkfehler während der Übertragung (normalerweise, wenn wir 100.000 ms erreichen, also vielleicht ein Timeout), gefolgt von Wiederholungsversuchen, die ohne Verbindungsproblem fehlschlugen (in 0,1 ms, also sehr schnell für ein Netzwerkproblem). Es kann jederzeit während der Nacht passieren (heute 3:14 Uhr, gestern 3:50 Uhr) und wenn es unterbrochen wird, erhalten alle Dateien, die in diesem Moment übertragen wurden, genau dasselbe Protokoll (nur die Übertragungszeit des ersten Versuchs ändert sich). Es ist nie dieselbe Datei, eine Datei kann 3 Tage hintereinander fehlschlagen und den Rest der Woche einwandfrei funktionieren.

Wenn ich den Ressourcenverbrauch im Netzwerkdiagramm überprüfe, erreiche ich nicht die maximale Bandbreite, die die Verbindung zwischen S1 und S2 verarbeiten kann. Als ich beim Host von S2 nach einem Protokoll fragte, sahen sie nichts und sagten mir, ich solle mir das Systemprotokoll von S2 ansehen, um zu verstehen, was passiert ist.

Ich bin der Root von S1 und S2, daher kann ich jedes Protokoll überprüfen, aber ich weiß nicht, wo ich suchen soll (und wonach ich suche).

Antwort1

Nach der Suche im PHP-Fehlerprotokoll finde ich einen Hinweis:

PHP-Hinweis: Verbindung vorzeitig geschlossen in /usr/share/php/Net/SSH2.php in Zeile yyyy. PHP-Hinweis: Verbindung vom Server geschlossen in /usr/share/php/Net/SSH2.php in Zeile xxxx. PHP-Hinweis: Verbindung vom Server geschlossen in /usr/share/php/Net/SSH2.php in Zeile xxxx.

In der Datei SSH2.php, Zeile xxxx, habe ich festgestellt, dass $this->fsock bei einem Verbindungsfehler nicht zurückgesetzt wird, der Test if (!is_resource($this->fsock)) immer noch falsch ist und das fsockopen dann nicht erneut ausgeführt wird.

Ich setze meine Net_SFTP-Klasse auf Null und führe während des Wiederholungsversuchs ein neues Net_SFTP() aus. Jetzt habe ich dieses Problem nicht mehr (ich habe immer noch eine Netzwerkunterbrechung, die ich nicht identifizieren kann, aber der Wiederholungsversuch funktioniert jetzt).

verwandte Informationen