Ich übertrage Dateien über das Netzwerk mit rsync im Cron-Job, der alle 1 Minute ausgeführt wird. Die Aufgabe ist, wann immer neue Dateien auf den Remote-Server hochgeladen werden müssen:
Da ich neu bin, mache ich hier einen großen Fehler:
* * * * * rsync -azP /local_path [email protected]:/remote_path > /dev/null
rsync temporäre Datei erstellen (am Remote-Ende) und in der nächsten Minute wird die temporäre Datei erneut erstellt (am Remote-Ende). Nach einigen Minuten wird in meinem Netzwerk eine Drosselung festgestellt, und es ist keine Upload-Bandbreite mehr vorhanden. Dann bringe ich alle rsync-Prozesse zum Stillstand und kopiere gleichzeitig.
Benötigen Sie diese automatisierte bitte helfen.
Vielen Dank
Antworten:
Es sieht so aus, als ob die Ausführung des Befehls länger als eine Minute dauert. Die Befehle häufen sich also, bis auf Ihrem System die Ressourcen ausgehen.
Sie können sicherstellen, dass nur eine Instanz davon ausgeführt wird,
rsync
indem Sie eine Sperrdatei verwenden.util-linux
Beinhaltet einen Dateisperr-Wrapper namensflock
, den Sie in Ihrer Crontab folgendermaßen verwenden können:Im obigen Beispiel lautet der Pfad der Sperrdatei
/tmp/example.lock
, Sie können ihn jedoch auf einen beliebigen sinnvollen Pfad festlegen.-n
verhindert, dass sichflock
Befehle häufen, da sie sofort beendet werden, anstatt darauf zu warten, dass die Sperre aufgehoben wird, um fortzufahren.Alternativ können Sie auch verhindern, dass sich Ihr Cron-Befehl aufhäuft, indem Sie ein Skript mit einer relativ einfachen Sperre erstellen, die sicherstellt, dass immer nur eine Instanz des Skripts ausgeführt werden kann:
Sperrmechanismus inspiriert durch Verhindern von doppelten Cron-Job-Ausführungen von Benjamin Cane
Beachten Sie, dass das Skript fälschlicherweise beendet wird, wenn die PID-Datei aus irgendeinem Grund nicht entfernt wird und ein anderer Prozess dieselbe PID hat.
Speichern Sie dieses Skript irgendwo, wie in
/usr/local/bin/example.sh
,chmod +x /usr/local/bin/example.sh
und nennen es dann von Ihrem crontab wie folgt aus :quelle
rsync
Start verhindern . Außerdem muss derrm
Befehl in einem solchen Skript über ausgeführt werdentrap
, um sicherzustellen, dass für den Fall, dass beispielsweise ein Neustart oder ein Herunterfahren erfolgt, die PID-Datei entfernt wird. Ermutigen Sie die Schüler auch, zumindest einen Teil ihrer Arbeiten zu erledigen, anstatt ihnen kostenlose Lösungen zu gebenZuallererst entferne
-P
Option, cron wird wirklich keinen Fortschritt sehen.Sie müssen einen Sperrmechanismus implementieren, nicht
rsync
direkt von cron aus aufrufen , sondern stattdessen ein Skript erstellen, das in cron verwendet wird. Überprüfen Sie im Skript die erste Bedingung, wenn siersync
bereits ausgeführt wird (z. B. grep ps output). Wenn sie ausgeführt wird, beenden Sie einfach das Skript, andernfalls führen Sie sie ausrsync
.quelle