如何捕获SFTP(bash /期望脚本)错误并稍后重新发送?

时间:2018-10-10 13:10:11

标签: shell sftp expect file-transfer

我有一个bash / expect脚本,该脚本通过SFTP(旧ssh版本)发送文件。使用下面显示的bash / expect脚本完成。该脚本使用传入目录,然后在对文件进行SFTP处理后,将文件移至处理后的目录中。

我一直看到一些故障,其中一些文件通过SFTP传输到GoAnywhere服务器。我已经做过一些研究,看来转移失败了(大约3%的时间)。 SFTP和GoAnywhere应用程序上的错误日志均显示失败,但找不到详细信息。也许是网络安全性,或者只是一个不良的网络,正在切断连接。

我在脚本编写方面取得了很大的进步,但是我一直无法弄清楚如何捕获错误,因此无法“将文件”“移到”已处理的目录中。我是新来的期望脚本。我需要一些有关如何重写Expects部分以获取错误的建议,并在成功时选择“ mv”(移动)命令。

#!/bin/bash
today=`date +'%k:%M:%S-%m.%d.%Y'`
nowdate=`date +'%d%H%M'`
xferhome="/home/me"
recdir="$xferhome/fax_incoming_prod"
procdir="$xferhome/fax_processed_prod"

# log stuff..
logfile="$xferhome/log/fax_xfer_prod.log"
# clean up log file @ beginning of every month..
if [ $nowdate -eq "091200" ]; then
        rm $logfile
fi

cd ${recdir}

# start
{

filearray=($(ls -ltr *.{pdf,fmi} 2>/dev/null | awk '{print $9}'))
idx=$((${#filearray[*]} - 1))

if [ $((${#filearray[*]})) -eq 0 ]; then
    echo "${today} Nothing found.."
    exit 2
fi

echo "${today} - send files..."

for ((i=0;i<=${idx};i++)); do
    echo "SFTP'ing .pdf file: ${filearray[${i}]}"
    fname=${filearray[${i}]}
    export fname
    expect <<'END'

        # Expect Variables

        set FTPUSER MYUser
        set FNAME $env(fname)
        set FTPSERVER secure.site.com

        spawn /usr/bin/sftp -v -oPort=22 $FTPUSER\@$FTPSERVER
        expect "sftp>"
        send "cd /\n"
        expect "sftp>"
        send "put $FNAME\n"
        expect "sftp>"
        send "quit\n"

END
    echo "Moving ${filearray[${i}]} to processed directory"
    mv ${filearray[${i}]} ${procdir}/.
done

# logit all.. :)
} >>$logfile 2>>$logfile

0 个答案:

没有答案