Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
tomi89
- Beiträge: 269
- Registriert: 21.08.2014 00:21:52
Beitrag
von tomi89 » 01.11.2015 17:01:39
Hallo Debianer,
kann mir jemand sagen wie man die Zeilen in einem Shellscript failsafe parallel ausführt oder nach welchen Begriffen man dazu googlen sollte?
Gegeben sei folgendes Shell Script:
Code: Alles auswählen
Befehl1 &
Befehl2 &
Befehl3 &
Befehl4 &
Befehl5 &
Befehl6 &
Nun sind die Befehle 4 bis 6 jedoch von den Ergebnissen der Befehle 1 bis 3 abhängig geworden.
Sprich zu Erst sollen nun die Befehle 1 bis 3 parallel UND BIS ZU IHRER VOLLSTÄNDIGEN FERTIGSTELLUNG ausgeführt werden. Erst danach sollen die Befehle 4 bis 6 PARALLEL ausgeführt werden.
Zuletzt geändert von
tomi89 am 01.11.2015 19:43:19, insgesamt 1-mal geändert.
-
rendegast
- Beiträge: 15041
- Registriert: 27.02.2006 16:50:33
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von rendegast » 01.11.2015 18:04:18
Code: Alles auswählen
tmpa=$(tempfile)
tmpb=$(tempfile)
tmpc=$(tempfile)
( Befehl1; rm $tmpa; ) &
( Befehl2; rm $tmpb; ) &
( Befehl3; rm $tmpc; ) &
until [ "x" = "x$(ls $tmpa $tmpb $tmpc 2>/dev/null)" ]; do
sleep 1
done
Befehl4 &
Befehl5 &
Befehl6 &
EDIT 'sleep1' -> 'sleep 1'
Oder ist sowas gemeint?
Code: Alles auswählen
( Befehl1; Befehl4; ) &
( Befehl2; Befehl5; ) &
( Befehl3; Befehl6; ) &
Zuletzt geändert von
rendegast am 03.11.2015 12:42:57, insgesamt 2-mal geändert.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-
tomi89
- Beiträge: 269
- Registriert: 21.08.2014 00:21:52
Beitrag
von tomi89 » 01.11.2015 19:25:00
Vielen Dank für die Hilfe.
Der Trick mit until hat 1A geklappt.
-
Milbret
- Beiträge: 827
- Registriert: 26.05.2008 12:04:54
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: Nörten-Hardenberg
-
Kontaktdaten:
Beitrag
von Milbret » 03.11.2015 10:01:44
Wäre es nicht sinnvoller direkt mit wait zu arbeiten?
wait ohne Parameter wartet dann solange, bis die Befehle im Hintergrund durch sind.
Dies ist meiner Meinung nach eine saubere Lösung als das until.
Danach kannst du dann deine restlichen Befehle abarbeiten lassen und dann nochmals mit wait auf deren Verarbeitung warten.
Nutze solch ein Konstrukt bei mir um rsync Backups parallel zu machen und dann am Ende auf alle zu warten.
Martin