У меня есть скрипт bash / wait, который отправляет файлы через SFTP (старая версия ssh).Это делается с использованием сценариев bash / ожидаемого, показанных ниже.Сценарий использует входящий каталог, а затем после SFTP-файла (ов) перемещает файлы в обработанный каталог.
Я видел некоторые сбои, когда некоторые файлы передавались через SFTP всервер GoAnywhere.Я провел некоторое исследование, и похоже, что переводы терпят неудачу (около 3% времени).Журналы ошибок как в SFTP, так и в приложении GoAnywhere показывают сбои, но никакой подробной информации найти не удается.Возможно, сетевая безопасность или просто плохая сеть обрезает соединение.
Я многое сделал со сценариями, но не смог выяснить, как зафиксировать ошибку (и) и, следовательно, «не перемещать» файл (ы) в обработанный каталог.Я новичок ожидать сценариев.Мне нужно несколько советов о том, как переписать раздел ожидаемых, чтобы зафиксировать ошибки и, при необходимости, команду "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