scp .lzo 文件,然后解压缩并删除 .lzo 文件

scp .lzo 文件,然后解压缩并删除 .lzo 文件

.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

相关内容