rsync, sleep

M

majkel-bewit

Jungspund
Hallo zusammen,

Ich schreibe ein Skript, das es rsync-Prozess startet, aber nur dann, wenn ein andere rsync-Prozess fertig ist. Wenn es schon ein Prozess gibt, dann versucht es noch einmal nach 30 Minuten.

Meine Gedanken:
RSYNC=`ps aux | grep rsync | wc -l`

if [$RSYNC = 1] ; then
rsync [Quelle] [Ziel]
else
sleep 1800
echo "Warte 30 Minuten bis rsync fertig ist..."
fi

Bestimmt muss man while Schleife dazu benutzen, oder? Kann jemand das korrigieren?

Danke im Voraus!!!
Gruß
 
Hi,

wie ich selber hier gelernt habe, gibt es pgrep zum suchen nach laufenden Prozessen.

Die while Schleife kannst du ja einfach um die if Abfrage packen, und in dem if statement noch eine vorher definierte boolean Variable auf wahr setzen, die dann von der while Schleife ueberprueft wird.

Fuer Quellcode bitte Code-Bloecke verwenden.

mfg,
bytepool
 
Danke für schnelle Antwort!!

So sieht das funktionierende Skript aus.
#!/bin/sh

DATE=`date`
flag=true

while [ "$flag" = "true" ]
do
if [ `ps -ef | grep -c "ldap"` == "1" ]; then
echo "the rsync process went down at $DATE"
rsync [Quelle] [Ziel]
flag=false
else
echo "rsync is running"
flag=true
sleep 1800
fi
done
 
Hi,

dazu noch schnell ein paar Anmerkungen und Tipps.

Du hast jetzt statt Code-Bloecken Zitat-Bloecke genommen, das ist zwar schon eine leichte Verbesserung, macht aber u.a. Einrueckungen zunichte.

Code:
if [ `ps -ef | grep -c "ldap"` == "1" ]; then
Ich denke nicht dass das funktioniert, [ ] kennt kein "==", sondern nur "=" oder "-eq". In diesem Fall waere ein numerischer Vergleich (-eq) wohl angebrachter.

Aber, wie in meinem Link auch schon angedeutet, kannst du besser pgrep benutzen:
Code:
if [ ! "$(pgrep -fd, ldap)" ]; then

Flag Variablen sollte man am besten immer nach der Funktion benennen, also z.B. statt "flag" lieber "rsync_running" oder "not_done" oder so. Das macht Programme etwas lesbarer. Und lokale Variablen am besten immer klein schreiben, dann laeufst du keine Gefahr irgendwelchen Umgebungsvariablen in die Quere zu kommen.

Edit: Und "flag" muss in der Schleife natuerlich nur einmal auf false gesetzt werden, die zweite Zuweisung flag=true ist ueberfluessig und frisst nur Ressourcen.

mfg,
bytepool
 
Zuletzt bearbeitet:
Hallo,
danke für Tipps!

Stimmt, aber bei mir funktioniert mit "==".

MfG
majkel-bewit
 

Ähnliche Themen

Skript soll nicht doppelt laufen... kill pkill pid cron

Shell Skript beschleunigen

HandbrakeCLI Shell Skript

[Erledigt] Shell-Skript lässt sich nicht mit Cron ausführen

verzeichniss suche funktioniert nicht

Zurück
Oben