2013-08-07 3 views
0

자동화 된 백업 쉘 스크립트를 실행했지만 훌륭하게 작동하지만 FTP가 몇 분 동안 나를 차단합니다. 재시도 기능을 추가하고 싶습니다. 아래는 내 코드 샘플입니다.bash 스크립트의 ftp 인증 출력을 확인하십시오.

echo "Moving to external server" 
    cd /root/backup/ 
/usr/bin/ftp -n -i $FTP_SERVER <<END_SCRIPT 
    user $FTP_USERNAME $FTP_PASSWORD 
    mput $FILE 
    bye 
END_SCRIPT 

실패한 로그인 후 나는 같은 출력을 캡처하고 다시 시도하기 전에 몇 분 동안 잠 코드 atempt을해야

Authentication failed. Blocked. 
Login failed. 
Incorrect sequence of commands: PASS required after USER 

아래의 메시지가 표시됩니다.

아이디어가 있으십니까?

아래의 메시지는 아마 당신이 먼저 표준 에러 출력을 캡처해야합니다, 그래서 대신에 표준 출력의 stderr로가는

답변

1

이 가능하면 lftp을 살펴보십시오.

lftp으로 재 연결 사이의 시간 등 수동으로 매개 변수를 설정할 수 있습니다.

lftp하여 목표를 달성하기 위해 당신은 ftp:retry-530 후 패턴이 매 60 * 10 초 다시 연결하려고 lftp 서버의 530 응답과 일치하면 다음

lftp -u user,password ${FTP_SERVER} <<END 
set ftp:retry-530 "Authentication failed" 
set net:reconnect-interval-base 60 
set net:reconnect-interval-multiplier 10 
set net:max-retries 10 
<some more custom commands> 
END 

를 호출해야합니다.

+0

이것은 확실히 내 문제를 해결합니다. 그러나 나는 그것을 배우기 위해 어려운 길로하고 싶습니다. 대화 형 모드 종료 논리 연산을 수행 한 다음 대화식 모드로 다시 들어가서 코드를 계속 진행하십시오. – fawzib

+0

503 오류 "차단됨"에 대해 재 시도하는 방법. – fawzib

1

: 당신은 내가 당신을 격려 관심의 시스템에 추가 프로그램을 설치하는

while true 
do 
    if (script 2>&1 |grep -q 'Authentication failed') 
    then 
    echo "authentication failed, sleeping for a while before trying again" 
    sleep 60 
    else 
    #everything worked, break out of the while loop 
    break 
    fi 
done 
+0

FTP 명령을 입력하면 대화식 입력이되므로 END_SCRIPT를 사용하는 이유입니다. 내가 위의 코드처럼 논리를 어떻게 할 수 있습니까? – fawzib

+0

if (lftp ....... << END ..... .... ... END 2> & 1 | grep -q '인증에 실패했습니다.') – dtorgo

관련 문제