我有一个脚本,它将在每个服务器中运行并将某些文件复制到其中。脚本知道我在哪里运行以及我需要复制哪些文件。
脚本将从本地数据中心复制文件,local_dc
但如果它关闭或没有响应,那么它将从远程数据中心复制相同的文件remote_dc_1
,如果它也关闭,那么它将从另一个远程数据中心复制相同的文件,remote_dc_2
如下所示。
现在让我们说如果local_dc
机器停机,那么它将从remote_dc_1
机器复制文件,所以我需要发送一封电子邮件说这台机器停机所以从其他远程机器复制。如果 local_dc 机器停机,我不想发送多封电子邮件,所以我在最后发送电子邮件,这样每个文件我只会收到一封电子邮件,而不是多封电子邮件。
下面是我的脚本 -
do_Copy() {
el=$1
PRIMSEC=$2
scp david@"$local_dc":"$dir3"/new_weekly_2014_"$el"_200003_5.data "$PRIMSEC"/. \
|| (a=1 && scp david@"$remote_dc_1":"$dir3"/new_weekly_2014_"$el"_200003_5.data "$PRIMSEC"/.) \
|| (b=2 && scp david@"$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 "david@host.com" -s "$local_dc machine down" "david@host.com"
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 "david@host.com" -s "$remote_dc_1 machine down" "david@host.com"
fi
if [ $c -eq 3 ]
then
echo "All three machine's are down. Exiting out." | mailx -r "david@host.com" -s "All three machine's are down" "david@host.com"
fi
我在带有变量 a、b 和 c 的子 shell 中做错了什么吗?