.lzo
我有一个从远程服务器复制文件的脚本。该脚本将尝试从三台服务器中的每台进行复制,如果其中一台服务器出现故障,则会发送一封电子邮件。
我的脚本如下,它按预期工作:
export status_dir=$(mktemp -t -d transfer.XXXXXX)
cleanup() { rm -rf "$status_dir"; }
trap cleanup 0 # automatically clean up on exit
do_Copy() {
el=$1
PRIMSEC=$2
scp david@"$local_dc":"$dir3"/new_clients_2014_"$el"_200003_5.data.lzo "$PRIMSEC"/. \
|| { touch "$status_dir/local_down" && scp david@"$remote_dc_1":"$dir3"/new_clients_2014_"$el"_200003_5.data.lzo "$PRIMSEC"/.; } \
|| { touch "$status_dir/primary_down" && scp david@"$remote_dc_2":"$dir3"/new_clients_2014_"$el"_200003_5.data.lzo "$PRIMSEC"/.; } \
|| { touch "$status_dir/secondary_down"; exit 1; }
}
parallel -j 12 do_Copy {} $PRIMARY ::: "${PARTITION_DATA_1[@]}" &
parallel -j 12 do_Copy {} $SECONDARY ::: "${PARTITION_DATA_2[@]}" &
wait
[[ -e "$status_dir/local_down" ]] && \
mailx -r "[email protected]" -s "$local_dc machine down" "[email protected]" \
<<<"Local machine $local_dc was down, so copied from Primary Remote machine $remote_dc_1"
[[ -e "$status_dir/primary_down" ]] && \
mailx -r "[email protected]" -s "$remote_dc_1 machine down" "[email protected]" \
<<<"Primary Remote machine $remote_dc_1 was down, so copied from Secondary Remote machine $remote_dc_2"
[[ -e "$status_dir/secondary_down" ]] && \
mailx -r "[email protected]" -s "All three machine's are down" "[email protected]" \
<<<"All three machines are down. Exiting out."
上面的脚本完成后,我运行第二个脚本来解压缩所有.lzo
文件,然后删除它们:
#!/bin/bash
set -e
export PRIMARY=/test01/primary
export SECONDARY=/test02/secondary
parallel lzop -dU -- ::: {"$PRIMARY","$SECONDARY"}/*.lzo
我想结合这两个脚本。不必运行第二个,而是让第一个也解压缩并删除文件.lzo
。我假设只有下面的代码块会被修改,但我不确定应该添加什么,因为我用来检查机器是否已关闭的测试。
do_Copy() {
el=$1
PRIMSEC=$2
scp david@"$local_dc":"$dir3"/new_clients_2014_"$el"_200003_5.data.lzo "$PRIMSEC"/. \
|| { touch "$status_dir/local_down" && scp david@"$remote_dc_1":"$dir3"/new_clients_2014_"$el"_200003_5.data.lzo "$PRIMSEC"/.; } \
|| { touch "$status_dir/primary_down" && scp david@"$remote_dc_2":"$dir3"/new_clients_2014_"$el"_200003_5.data.lzo "$PRIMSEC"/.; } \
|| { touch "$status_dir/secondary_down"; exit 1; }
}
组合脚本是我最好的选择吗?或者我应该继续做我之前做的事情并有两个脚本?如果我按照现在的方式进行操作,是否需要更多的磁盘空间来同时容纳.lzo
未压缩的文件,然后稍后删除?.lzo
答案1
当然可以,你可以结合起来。服务器是否启动完全无关。无论您从哪个服务器下载,.lzo
文件将始终位于同一个位置。此外,无论您有一个脚本还是两个脚本,所需的磁盘空间都没有区别。为什么应该这样?在这两种情况下,您都解压缩同一个文件。只需将第二个脚本中的行添加到复制函数中即可:
do_Copy() {
el=$1
PRIMSEC=$2
scp david@"$local_dc":"$dir3"/new_clients_2014_"$el"_200003_5.data.lzo "$PRIMSEC"/. \
|| { touch "$status_dir/local_down" && scp david@"$remote_dc_1":"$dir3"/new_clients_2014_"$el"_200003_5.data.lzo "$PRIMSEC"/.; } \
|| { touch "$status_dir/primary_down" && scp david@"$remote_dc_2":"$dir3"/new_clients_2014_"$el"_200003_5.data.lzo "$PRIMSEC"/.; } \
|| { touch "$status_dir/secondary_down"; exit 1; }
}
PRIMARY=/test01/primary
SECONDARY=/test02/secondary
parallel lzop -dU -- ::: {"$PRIMARY","$SECONDARY"}/*.lzo