Вот простой пример того, что я имел в виду в своем комментарии.
Цикл for (с повторением до успеха для каждой команды psql, выполняемой в фоновой под-оболочке). Нет необходимости в массиве сгенерированных подстановочных файлов-дескрипторов процессов.
cred='user=dbadmin password=SECRET'
domain='example.com'
tf=$(mktemp)
cat > "$tf"
for z in db1 db2 db3 xdb1 ; do
( while ! psql -X "host=$z.$domain dbname=$z $cred" < "$tf" ; do : ; done) &
done > /dev/null
# don't delete the tempfile until all jobs have completed
wait
rm -f "$tf"
При желании используйте sleep x
вместо :
в цикле while
, чтобы иметь небольшую задержку между каждой повторной попыткой.
Более умная версия могла бы делать больше внутри цикла while, проверять статус выхода и / или grep stderr, чтобы выяснить причину любого сбоя и отреагировать соответствующим образом.