Prozess-Id in Skript auslesen

Warum Debian? Was muss ich vorher wissen? Wo geht's nach der Installation weiter?
Antworten
fiberkill
Beiträge: 218
Registriert: 28.03.2007 09:08:30

Prozess-Id in Skript auslesen

Beitrag von fiberkill » 04.12.2019 07:43:44

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

MSfree
Beiträge: 4802
Registriert: 25.09.2007 19:59:30

Re: Prozess-Id in Skript auslesen

Beitrag von MSfree » 04.12.2019 08:28:07

fiberkill hat geschrieben: ↑ zum Beitrag ↑
04.12.2019 07:43:44
Nun möchte ich innerhalb des Skriptes die Prozess-Id des rsync-Prozesses weiterverarbeiten.
Wozu? So eine Process-ID ist doch sowas von nichtssagend, daß man damit erstmal nichts anfängt.
Ich habe versucht das Ganze in eine Variable zu schreiben z.B. RSYNC_PID=$!...
Siehe man bash:
! Expands to the process ID of the most recently executed background (asynchronous) command.
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?

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. :wink:

fiberkill
Beiträge: 218
Registriert: 28.03.2007 09:08:30

Re: Prozess-Id in Skript auslesen

Beitrag von fiberkill » 04.12.2019 08:33:54

@ 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

MSfree
Beiträge: 4802
Registriert: 25.09.2007 19:59:30

Re: Prozess-Id in Skript auslesen

Beitrag von MSfree » 04.12.2019 09:15:06

fiberkill hat geschrieben: ↑ zum Beitrag ↑
04.12.2019 08:33:54
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.
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:

Code: Alles auswählen

while ! \
  rsync mit deinen Parametern
do
  sleep 60
done
Das sleep 60 wartet zwischen zwei Versuchen eine Minute, der Wert kann aber auch kleiner eingestellt werden.

fiberkill
Beiträge: 218
Registriert: 28.03.2007 09:08:30

Re: Prozess-Id in Skript auslesen

Beitrag von fiberkill » 04.12.2019 11:38:31

@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

MSfree
Beiträge: 4802
Registriert: 25.09.2007 19:59:30

Re: Prozess-Id in Skript auslesen

Beitrag von MSfree » 04.12.2019 11:57:22

fiberkill hat geschrieben: ↑ zum Beitrag ↑
04.12.2019 11:38:31
Wenn der rsync noch läuft, aber nichts mehr macht, wird das dann auch erkannt ?
Wenn rsync nichts mehr macht, ist er fertig und beendet sich sauber mit Rückgabewert Null (die Exit Codes stehen unter man rsync).

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.

Antworten