Lösung 1:
Sie können eine Art Sperre implementieren. Dies gibt die Anzahl der noch laufenden rsync-Prozesse aus:
pgrep -cx rsync
Und dies wird den rsync nur ausführen, wenn kein anderer rsync-Prozess existiert:
pgrep -cx rsync || rsync ...
Mit -x
verhindert, dass versehentlich unerwünschte Namen abgeglichen werden (zum Beispiel "foobarsync hronizator" oder "not_an_rsync _totally" - es funktioniert genauso wie pgrep -c ^rsync$
)
Lösung 2:
Sie können den Flock-Befehl verwenden, um dies zu tun, z. In diesem Fall flock -n
ist wahrscheinlich das, was Sie wollen, da es einen sofortigen Fehler des Befehls verursacht, wenn er die Sperre nicht erhalten kann, z. B.
30 * * * * /usr/bin/flock -n /tmp/myRsyncJob.lck /path/to/your/rsyncScript
Lösung 3:
Hier ist, was ich tun würde. Erstellen Sie ein Wrapper-Skript um rsync herum, um eine Sperrdatei zu erstellen.
script 1
- create lock file
- rsync
- remove lock file
script 2 (running later then script 1)
- check if lock file is there
- if not run
- if it is there wait 10 minutes in a loop. break out of lopp when the lock file is gone
- continue to run script
Lösung 4:
Wenn Sie bereit sind, andere Tools in Betracht zu ziehen, können Sie sich auch rdiff-backup ansehen. Es verwendet librsync, um Sicherungen durchzuführen, und speichert eine konfigurierbare Anzahl von Deltas/Inkrementen. Es sperrt auch, so dass nur ein rdiff-Backup-Prozess zu einem bestimmten Zeitpunkt ausgeführt werden kann.
Lösung 5:
Meine Antwort ist in etwa dieselbe, die Mike gesagt hat.
In das Skript sollten Sie etwa Folgendes einfügen:
- eine Sperrdatei erstellen
- Überprüfen Sie die Existenz der Sperrdatei, wenn Sie sie das nächste Mal ausführen.
Aber es gibt eine sehr wichtige Sache, die Sie tun sollten. und das, um ein Trap-System zu implementieren.
Also, was Sie damit tun können, ist, dass Sie, selbst wenn Ihr Skript irgendwie getötet wird oder jemand es getötet hat, dieses Signal abfangen und die Sperrdatei entfernen können, sodass Sie keine veraltete Sperrdatei haben.
Wie Sie das umsetzen, können Sie hier nachlesen.
Nur eine Kleinigkeit, Sie können Signal 9 nicht abfangen, ich meine, wenn jemand kill -9
macht , können Sie das nicht abfangen, da dieses Signal direkt mit dem Kernel interagiert und es keine Möglichkeit gibt, das abzufangen.
Außerdem müssen Sie, wie von John vorgeschlagen, die Sperrdatei bei jedem Neustart Ihres Systems entfernen, nur um sicherzustellen, dass keine veraltete Datei mehr vorhanden ist.
Das können Sie ganz einfach tun, indem Sie ein kleines rm -f <FILE>
setzen Befehl in /etc/rc.local