Как перехватить SFTP (скрипт bash / Ожидается) ошибку и отправить позже? - PullRequest
0 голосов
/ 10 октября 2018

У меня есть скрипт 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
...