我有一个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