Позвольте мне начать с того, что я все еще изучаю bash-скриптинг и не знаю многих вещей. Если я что-то упустил, не стесняйтесь ругать меня, как вам будет угодно.
Далее я создаю простой скрипт bash для запуска ping на 2 разных хоста и вывода в файл. Я уже это сделал, и это работает. Из любопытства я добавил в скрипт вывод даты после и до вывода ping, чтобы знать, сколько времени занял запуск ping. Я установил ping на интервал в 1 секунду, 10 ping, 2 хоста. Моя первая дата (была давно...) имела 14:36:20 в качестве часовой метки. Вторая дата (после ping) имела 14:36:40 в качестве часовой метки.
Итак, дата ждала завершения обоих пингов. Это означает, что пинги выполнялись последовательно.
Могу ли я заставить их работать одновременно, чтобы тратить на выполнение скрипта 10 секунд вместо 20?
Вот фрагмент моего сценария:
date >> teste.txt
cat hosts.txt | while read output
do ping -c 10 -i 1 "$output" >> teste.txt
done
date >> teste.txt
Я хочу, чтобы этот скрипт выполнил еще несколько задач, но обещаю, что спрошу только в том случае, если не найду удовлетворительного ответа на Barsa.
PS: hosts.txt — это место, где я храню хосты, которые хочу пинговать.
решение1
Формулировку вашего вопроса немного сложно понять, но я думаю, вы ищете что-то вроде:
command &
command &
wait
Скрипт выполнит две команды в фоновом режиме и будет ждать ответа.
Однако в вашем случае вам нужно быть осторожным с состоянием гонки. Вероятно, вы захотите отправить вывод отдельных команд во временные файлы, а затем cat их в основной файл, поэтому вы, вероятно, сделаете что-то вроде:
command > "${tmp1}" &
command > "${tmp2}" &
wait
cat "${tmp1}" "${tmp2}" >> "${main}"
rm -f "${tmp1}" "${tmp2}"
Обновление: вы можете попробовать xargs (напримерhttps://stackoverflow.com/questions/15755422/linux-bash-script-to-ping-multiple-hosts-simultaneously)
решение2
С помощью GNU Parallel вы можете сделать следующее:
date >> teste.txt
cat hosts.txt | parallel -j0 ping -c 10 -i 1 {} >> teste.txt
date >> teste.txt