Hallo zusammen,
Ich bräucht mal Eure Hilfe.
Ich habe ein Backup-Skript (bash) erstellt, in dem ich unter anderem einen rsync laufen lasse.
Nun möchte ich innerhalb des Skriptes die Prozess-Id des rsync-Prozesses weiterverarbeiten.
Jetzt stellt sich mir die Frage, wie ich an die Prozess-ID dieses rsync komme?
Ich habe versucht das Ganze in eine Variable zu schreiben z.B. RSYNC_PID=$!
Auch habe ich schon versucht die Prozessid zu exportieren: export RSYNC_PID="$!"
Die Variable RSYNC_PID ist immer leer.
Wo liegt hier der Hund begraben?
Vielen Dank im Voraus.
Gruß FK
Prozess-Id in Skript auslesen
Re: Prozess-Id in Skript auslesen
Wozu? So eine Process-ID ist doch sowas von nichtssagend, daß man damit erstmal nichts anfängt.fiberkill hat geschrieben:04.12.2019 07:43:44Nun möchte ich innerhalb des Skriptes die Prozess-Id des rsync-Prozesses weiterverarbeiten.
Siehe man bash:Ich habe versucht das Ganze in eine Variable zu schreiben z.B. RSYNC_PID=$!...
Wenn du rsync nicht im Hintergrund startest, kommtst du mit $! nicht an die PID ran. Andererseits, wozu sollte man rsync im Hintergrund starten und dann mit den PID irgendwas zu machen?! Expands to the process ID of the most recently executed background (asynchronous) command.
Mir scheint, du versuchst mit der Brechstange eine Lösung für ein Problem zu finden, das man ohne von hinten durch die Brust ins Auge zu fassen, gar nicht erst hätte.
Re: Prozess-Id in Skript auslesen
@ MSfree:
Zur Erklärung:
ich muss sehr große Datenmengen über rsync synchonsieren. Da kommt es manchmal vor, dass sich ein rsync Prozess einfach so verabschiedet. Um das im Skript zu prüfen, brauche ich die ProzessID des rsync-Prozesses.
Gruß FK
Zur Erklärung:
ich muss sehr große Datenmengen über rsync synchonsieren. Da kommt es manchmal vor, dass sich ein rsync Prozess einfach so verabschiedet. Um das im Skript zu prüfen, brauche ich die ProzessID des rsync-Prozesses.
Gruß FK
Re: Prozess-Id in Skript auslesen
Genau das hatte ich befürchtet. Und, nein, dazu brauchst du die PID nicht. Eine einfache Schleife, die den Rückgabewert von rsync prüft, tut es auch:fiberkill hat geschrieben:04.12.2019 08:33:54ich muss sehr große Datenmengen über rsync synchonsieren. Da kommt es manchmal vor, dass sich ein rsync Prozess einfach so verabschiedet. Um das im Skript zu prüfen, brauche ich die ProzessID des rsync-Prozesses.
Code: Alles auswählen
while ! \
rsync mit deinen Parametern
do
sleep 60
done
Re: Prozess-Id in Skript auslesen
@MSfree:
Dein Tip mit der While Schleife klappt super. vielen Dank.
Eine Frage hätte ich noch:
Wenn der rsync noch läuft, aber nichts mehr macht, wird das dann auch erkannt ?
Gruß FK
Dein Tip mit der While Schleife klappt super. vielen Dank.
Eine Frage hätte ich noch:
Wenn der rsync noch läuft, aber nichts mehr macht, wird das dann auch erkannt ?
Gruß FK
Re: Prozess-Id in Skript auslesen
Wenn rsync nichts mehr macht, ist er fertig und beendet sich sauber mit Rückgabewert Null (die Exit Codes stehen unter man rsync).fiberkill hat geschrieben:04.12.2019 11:38:31Wenn der rsync noch läuft, aber nichts mehr macht, wird das dann auch erkannt ?
Wenn die Datenübertagung nicht mehr funktioniert, wird sich rsync nach einem Timeout beenden und einen Nichtnull Wert liefern.
Das einzige, wo du ggfls. drauf achten mußt, ist, daß du nicht zwei rsyncs gleichzeitig laufen hast. Wenn du z.B. täglich ein Backup machst und das Backup dauert ausnahmsweise mal länger als 24h, dann kann es passieren, daß cron den nächsten rsync schon startet, obwohl der alte noch läuft. Aber auch dazu braucht man keine PID, das kann man mit Locking-Mechanismen wie flock lösen, indem man den aktuell zu startenden Job nur startet, wenn kein Lock mehr existiert, sonst fällt das Backup halt ausnahmsweise aus und es gibt erst am nächsten Tag wieder eins.