У меня есть
parallel --j 2 -- "sh script1" "sh script2"
где script1
и script2
войти в файлы log1
иlog2
Я хотел бы изменить это на:
parallel --j 3 -- "sh script1" "sh script2" "tail -f log1 log2"
Причина использования tail в том, что когда я позволяю двум скриптам выводить данные на экран одновременно, вывод становится беспорядочным, я теряю курсор и т. д. Возникают проблемы — мне приходится перезапускать терминал почти после каждого выполнения.
Проблема в том, что теперь это будет продолжаться вечно, а я хотел бы, чтобы tail завершил работу, когда script1 и script2 закончатся. Как мне это сделать?
решение1
Это можеттакжене то, что вы хотите, но как насчет:
parallel --j 2 -- "sh script1" "sh script2"; tail log1 log2
После завершения обеих задач вы избавитесь от необходимости ждать tail
оба файла журнала.
решение2
на самом деле, я нашел то, что мне нужно сделать:
parallel --j 2 -- "sh script1" "sh script2" &
PID=$!
tail --pid=$PID -f log1 log2
решение3
я хотел бы использоватьМногохвостыйилиtmux.
решение4
parallel --j 2 -- "sh script1" "sh script2" & tail -f log1 log2
Это происходит parallel ...
в фоновом режиме, а затем запускается tail ...
.
Нажатие Ctrl-Cна хвост не повлияет на parallel
выполнение заданий.
Если вам нужно перевести parallel
на передний план, завершите tail
и введите fg
. Чтобы снова отправить его на задний план (например, чтобы вы могли запустить его tail
еще раз), нажмите Ctrl-Zи введите bg
. Или вы можете завершить его с помощьюkill %%
Более подробную информацию смотрите в документации к вашей оболочке. Например, если вы используете bash, запустите man bash
и найдите (все заглавные буквы) JOB CONTROL
.