У меня есть сценарий, который будет работать на каждом сервере и копирует в него определенные файлы. Скрипт знает, где я работаю, и какие файлы мне нужно копировать.Как установить переменные в подоболочке?
Script будет копировать файлы из локального центра обработки данных local_dc
, но если он выключен или не отвечает, то он будет копировать одни и те же файлы из удаленного центра обработки данных remote_dc_1
и если это также вниз, то он будет копировать одни и те же файлы с другого удаленного центра обработки данных remote_dc_2
как показано ниже.
Теперь предположим, если машина local_dc
выключена, тогда она скопирует файлы с remote_dc_1
, поэтому мне нужно отправить электронное письмо с сообщением, что эта машина не работает, поэтому копирование с другой удаленной машины. Я не хочу отправлять несколько писем, если машина local_dc недоступна, поэтому я отправляю письма в конце, чтобы получить только один адрес электронной почты вместо нескольких писем для каждого файла.
Ниже мой сценарий -
do_Copy() {
el=$1
PRIMSEC=$2
scp [email protected]"$local_dc":"$dir3"/new_weekly_2014_"$el"_200003_5.data "$PRIMSEC"/. \
|| (a=1 && scp [email protected]"$remote_dc_1":"$dir3"/new_weekly_2014_"$el"_200003_5.data "$PRIMSEC"/.) \
|| (b=2 && scp [email protected]"$remote_dc_2":"$dir3"/new_weekly_2014_"$el"_200003_5.data "$PRIMSEC"/.) \
|| (c=3 && exit 1)
}
export -f do_Copy
parallel --retries 10 -j 10 do_Copy {} $PRIMARY ::: "${PRIMARY_PARTITION[@]}" &
parallel --retries 10 -j 10 do_Copy {} $SECONDARY ::: "${SECONDARY_PARTITION[@]}" &
wait
# problem is this doesn't work at all?
if [ $a -eq 1 ]
then
echo "Local machine $local_dc was down, so copied from Primary Remote machine $remote_dc_1" | mailx -r "[email protected]" -s "$local_dc machine down" "[email protected]"
fi
if [ $b -eq 2 ]
then
echo "Primary Remote machine $remote_dc_1 was down, so copied from Secondary Remote machine $remote_dc_2" | mailx -r "[email protected]" -s "$remote_dc_1 machine down" "[email protected]"
fi
if [ $c -eq 3 ]
then
echo "All three machine's are down. Exiting out." | mailx -r "[email protected]" -s "All three machine's are down" "[email protected]"
fi
Существует ничего плохого я делаю в моем субоболочке с переменной а, Ь и с?
Вы не можете передать переменные назад от дочернего процесса родителя, за исключением вне зоны - путем записи в файл для, пример. –
@CharlesDuffy я вижу. Есть ли другой способ, с помощью которого я могу решить свою проблему? – john
Во-первых, давайте создадим резервную копию и попытаемся выяснить логику - вы параллельно используете целую кучу экземпляров 'do_Copy', но тогда вы ожидаете написать только одну строку для' mail', хотя любой из них могут быть установлены флаги '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' или '' '' '' '' ' Каково фактическое намерение? –