验证LFTP传输成功

问题描述 投票:0回答:2

我正在使用lftp将文件从本地传输到仅允许SFTP访问的远程服务器。 我使用以下语法来传输文件:

lftp -c "open -u $UN,$Pass sftp://$Server ; mirror -R $Directory"

在传输文件时,这一切正常。 由于我将其用作嵌入 .sh 文件中的 cron,有时 lftp 会失败(出于未知原因)。

如何使用退出代码或可用于确保转账正确性的内容来验证转账?

transfer verify lftp
2个回答
8
投票

我想你必须将它包装在 shellscript 中。

shell脚本必须生成一个lftp脚本,例如:

set xfer:log true
set xfer:log-file "/path/to/somewhere/$DATESTAMP.log"
lcd "/path/of/source"
open -u $UN,$Pass sftp://$Server
mirror -R $Directory
quit

lftp -f $ScriptName
执行。

然后解析生成的日志文件;据我所知,它只包含成功的转账。

awk '{print $3,$6}' $DATESTAMP.log | sed -r -e 's/ [0-9]+-/ /'

上面将生成文件列表以及每个文件传输的字节数。例如,您可以循环结果并与实际文件大小进行比较

# WARNING: Script assumes that filename contains no space.
while read fname fsize; do
  # The following line used if the lftp runs from e.g. the source folder
  actualname=$Prefix/$fname
  actualsize=$(stat -c "%s" "$actualname")
  if (( actualsize != fsize )); then
    # Some error handling code here
  fi
done <<< "$(awk '{print $3,$6}' $DATESTAMP.log | sed -r -e 's/ [0-9]+-/ /')"

注意:我在那里使用“herestring”而不是管道,以便能够在

while
循环中操作变量。


0
投票

这是因为 cron 不使用与运行脚本的用户相同的环境。所有带有 $ 的东西在 cron 环境中都不存在。当您运行 .sh 文件来测试它时,它会使用 shell 环境来填充这些内容。当 cron 运行它时,它需要在 shell 脚本中创建从 env 获取的每个设置。

© www.soinside.com 2019 - 2024. All rights reserved.