У меня проблемы с многопроцессорной работой с BASH.Сценарий Bash не дожидается завершения фоновых заданий
У меня есть функция, которая делает это:
#Fait appel au script SSH pour le passage de commandes
sendSSHrequests() {
temp_info=$($mysql --skip-column-names -h $db_address -P $db_port -u $db_user -p$db_passwd $db_name -e "select $db_site_table.code_site, ip_routeur, operateur, hostname from $db_site_table, $db_routeur_table where $db_site_table.code_site=$db_routeur_table.code_site and $db_site_table.ip_routeur NOT IN (select ip from $db_erreur_table) AND $db_site_table.code_site REGEXP '([GM][0-9]$)';")
while read codesite ip operateur hostname
do
(sleep 3; /usr/bin/perl $DIR/GSU-RTR-sshscript.pl $codesite $ip $operateur $hostname) &
((current_proc_ssh++))
if [ $current_proc_ssh -eq $max_proc_ssh ]; then
printf "Pausing with $max_proc_ssh processes...\n"
current_proc_ssh=0
wait
fi
done<<<"$temp_info"
wait
}
Но на самом деле, это wait
не работает. Как я могу это увидеть? Потому что в моей «основной» части у меня есть это:
echo "----------------------demarrage---------------------------------"
date
sendSSHrequests
sh $DIR/GSU-RTR-recursiveCall.sh
echo "-------------------------fin------------------------------------"
И когда функция sendSSHrequests по-прежнему использует дочерние процессы, у меня есть выходы из сценария GSU-RTR-recursiveCall.sh
На всякий случай - правильно ли заполняется '$ temp_info' (т. Е. Возвращает результат вызова mysql')? –
Да, это так. Где условия убедитесь, что маршрутизатор не объявлен «ошибкой» в ошибке таблицы. Если нет, информация на 100% надежна –
Рассмотрите возможность использования GNU Parallel - она идеально подходит для этой задачи. –