셸 스크립트를 통해 실행하면 SFTP 작업이 중단됩니다.

셸 스크립트를 통해 실행하면 SFTP 작업이 중단됩니다.

다른 서버에서 파일을 가져오는 다음 스크립트가 있습니다.

#!/bin/bash

PROC_DATE=`date "+%Y%m%d"`
CURRENT_DATE=`date`
LOG_FILE="/home/tdata/dw/da/common/AWS_{PROC_DATE}.log"
AWS_CRED_FILE_NAME="/home/tdata/.aws/crnals"

cp -p ${AWS_CRED_FILE_NAME} ${AWS_CRED_FILE_NAME}_${PROC_DATE}
if [ $? -ne 0 ] ; then
        echo "Credentials backup Failed\n" > ${LOG_FILE}
        cat ${LOG_FILE}
        exit 1;
else
        cd /home/tdata/.aws/
        sshpass -f .OP004 sftp -o ConnectionAttempts=1 tdata@OP004 << !
          cd /home/tdata/.aws/
            get crnals
        bye
!
        if [ $? -ne 0 ]
        then
                echo "The credentials copy from OP004 to CP104 failed. Please check and re-run manually" > ${LOG_FILE}
                cat ${LOG_FILE}
                exit 1;
        else
                echo "The credentials copy job completed successfully on ${CURRENT_DATE}" > ${LOG_FILE}
                exit 0;
        fi
fi

그러나 아래 그림과 같이 오랜 시간 동안 망치로 쳐져서 전혀 완성되지 않았습니다.

$ sh -x AWS_CRED_COPY.sh
++ date +%Y%m%d
+ PROC_DATE=20221004
++ date
+ CURRENT_DATE='Tue Oct  4 02:07:56 CDT 2022'
+ LOG_FILE=/home/tdata/dw/da/common/AWS_20221004.log
+ AWS_CRED_FILE_NAME=/home/tdata/.aws/crnals
+ cp -p /home/tdata/.aws/crnals /home/tdata/.aws/crnals_20221004
+ '[' 0 -ne 0 ']'
+ cd /home/teradata/.aws/
+ sshpass -f .OP004 sftp -o ConnectionAttempts=1 teradata@OP004 

20초의 시간 초과 매개변수를 추가하려고 시도했지만 그 역시 작동하지 않았습니다.

그러나 CLI에서 SFTP 블록을 수동으로 실행하면 예상대로 정상적으로 실행됩니다.

tdata@cp114 -bash /opt/tdata/dw/data/common
$ sshpass -f .OP004 sftp -o ConnectionAttempts=1 teradata@OP004 << !
>           cd /home/teradata/.aws/
>             get crnals
>         bye
> !
Connected to ODRP5004.
sftp>           cd /home/teradata/.aws/
sftp>             get crnals
Fetching /home/tdata/.aws/crnals to canals
sftp>         bye

이 문제를 어떻게 해결할 수 있을지에 대한 아이디어가 있나요?

답변1

나는 당신과 같은 코드 조각을 성공적으로 실행했습니다.

명령을 직접 실행하십시오.

  • 비밀번호 파일을 삭제하면 터미널이 무기한 중지됩니다.
  • 파일에 잘못된 비밀번호가 제공되어 시간이 초과되었습니다 Permission denied, please try again..

스크립트를 실행하면 위와 동일한 결과가 나타납니다.

비밀번호 파일이 누락된 것 같습니다.

퀴즈: sshpass는 첫 번째 개행 문자까지 문자열을 가져옵니다.

관련 정보