[Backup] rsync nur einmal starten

christian83

Well-Known Member
Hallo zusammen,

ich muss euch mal mit einem kleinen Problem belästigen. Vermutlich ist es gar kein Problem wenn man Ahnung von Shellscripten hat ;)

Ich habe hier einen alten Thinclient mit Nas4Free ( http://www.nas4free.org/ ) da das ganze schlanker ist als FreeNAS. Ist aber vom Grundsatz sehr identisch. Ich möchte nun einen bestimmten Ordner über ssh und rsync auf meine HiDrive sichern. Dazu wird per Cronjob alle 12 Stunden ein Script gestartet welches im Prinzip den Befehl:

rsync [options] quelle ziel

enthält. Das ganze funktioniert auch wunderbar, jedoch habe ich das Problem das rsync ein weiteres mal gestartet wird wenn der vorherige Durchlauf aufgrund einer größeren Datenmenge noch nicht durchgelaufen ist. So etwas ist natürlich nicht Sinn der Sache und ich möchte nun sicherstellen das rsync nur einmal diesen Prozess ausführt und sofern die vorherige Sicherung noch nicht abgeschlossen ist einfach die neue Sicherung übersprungen wird. Hat da jemand von euch evtl. eine fertige Lösung irgendwo im Einsatz die nach Möglichkeit keine extra Funktionen benötigt?

Ich habe in der Zwischenzeit einfach eine Kontrolldatei erstellt die vor dem starten erstellt wird und am ende wieder entfernt wird. Sollte diese Datei vorhanden sein wenn Cron das Script aufruft wird es einfach wieder beendet. Wenn nun aber während der Sicherung z.B das System heruntergefahren wird hat man jedoch schon ein Problem weil man dann diese Datei manuell löschen muss, also nicht wirklich optimal ;)
 
Du könntest vermutlich mit ps und grep schauen ob rsync unter dem jeweiligen Benutzer oder mit den Optionen schon läuft und wenn ja es beenden, eine alternative wüsste ich nicht.
 
Einfaches locking implementieren.

Falls Lockfile existiert, exit 1. Lockfile anlegen. Zeug machen. Lockfile löschen.
 
[QUOTE="christian83, post: 275110, member: 7031"
Ich habe in der Zwischenzeit einfach eine Kontrolldatei erstellt die vor dem starten erstellt wird und am ende wieder entfernt wird. Sollte diese Datei vorhanden sein wenn Cron das Script aufruft wird es einfach wieder beendet. Wenn nun aber während der Sicherung z.B das System heruntergefahren wird hat man jedoch schon ein Problem weil man dann diese Datei manuell löschen muss, also nicht wirklich optimal ;)[/QUOTE]

TCM> Ich würde sagen: Das macht er schon ;)

Alternativ würde mir noch einfallen beim herunterfahren über die logdatei zu prüfen ob der Prozess noch läuft, und schauen ob man beim neustart / herunterfahren die logdatei löscht bzw. ggf. den Prozess auch irgendwie noch beendet, wobei das ja beim neustart / herunterfahren so-oder-so erledigt wird.
 
Man speichert in der Lock-Datei die PID und den Namen des nur einmal laufenden Prozesses. Wenn das Script startet und die Lock-Datei findet, schaut es ob schon einen Prozess mit der angegebenen PID und dem zugehörigen Namen gibt. Wenn ja beendet es sich, wenn nein löscht es die Datei.
 
Das hier klappt sicher auch:
Code:
  1 #!/usr/bin/env sh
  2
  3 if ! pgrep $1 > /dev/null 2>&1
  4 then
  5  echo "läuft nicht"
  6 else
  7  echo "läuft"
  8 fi

Anstelle von $1 schreibst du dann rsync oder was auch immer.

Gruss
 
Erst einmal danke für eure Anregungen.

Die Lösung von foxit funktioniert, eigentlich hatte ich es so auch geplant war mir aber nicht sicher ob Nas4Free pgrep bietet, ist aber vorhanden. Somit hat mein alter Sempron Thinclient wieder eine Sinnvolle Aufgabe. Ich bin da etwas von FreeNas verwöhnt, aber die Anforderungen dort sind ja der Wahnsinn und für den privaten gebrauch voll etwas sehr hoch. Mit Nas4Free läuft das ganze auch wunderbar mit 512 mb Ram und externen Festplatten.

Wie gesagt vielen Dank für eure Tipps.
 
Zurück
Oben