通过 shell 脚本运行时 SFTP 作业挂起

通过 shell 脚本运行时 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 获取字符串直到第一个换行符。

相关内容