Ich habe
parallel --j 2 -- "sh script1" "sh script2"
wo script1
und script2
loggen Sie sich in Dateien ein log1
undlog2
Ich möchte dies ändern in:
parallel --j 3 -- "sh script1" "sh script2" "tail -f log1 log2"
Der Grund für die Verwendung von Tail liegt darin, dass die Ausgabe der beiden Skripte gleichzeitig auf dem Bildschirm chaotisch wird und ich den Cursor verliere usw. – ich muss das Terminal fast nach jeder Ausführung neu starten.
Das Problem ist jedoch, dass dies jetzt ewig dauern wird und ich möchte, dass Tail beendet wird, wenn Skript1 und Skript2 fertig sind. Wie kann ich das machen?
Antwort1
Das vielleichtAuchnicht das sein, was Sie wollen, aber wie wäre es mit:
parallel --j 2 -- "sh script1" "sh script2"; tail log1 log2
Sobald beide Jobs abgeschlossen sind, wird die Wartezeit tail
beider Protokolldateien aufgehoben.
Antwort2
tatsächlich habe ich gefunden, was ich tun muss:
parallel --j 2 -- "sh script1" "sh script2" &
PID=$!
tail --pid=$PID -f log1 log2
Antwort3
ich würde ... benutzenMehrschwanzodertmux.
Antwort4
parallel --j 2 -- "sh script1" "sh script2" & tail -f log1 log2
Dies läuft parallel ...
im Hintergrund und wird dann ausgeführt tail ...
.
Durch Drücken Ctrl-Cauf den Schwanz wird die Arbeit nicht beeinträchtigt parallel
.
parallel
Wenn Sie den in den Vordergrund bringen müssen , beenden Sie den tail
und geben Sie ein fg
. Um ihn wieder in den Hintergrund zu schicken (z. B. damit Sie ihn tail
noch einmal ausführen können), drücken Sie Ctrl-Zund geben Sie ein bg
. Oder Sie beenden ihn mitkill %%
Weitere Einzelheiten finden Sie in der Shell-Dokumentation. Wenn Sie z. B. Bash verwenden, führen Sie man bash
(alles in Großbuchstaben) aus und suchen Sie danach JOB CONTROL
.