2013-06-10 2 views
1

나는이 문제를 거의 하루 종일 풀려고 시도해 봤지만 모든 곳에서 인터넷 검색을하고이 포럼을 몇 시간 동안 열었지만 아직 문제가있는 곳을 발견하지 못했습니다. 매 시간마다 응용 프로그램 로그 파일을 구문 분석하고 데이터베이스 업로드를 위해 원격 서버에 시간당 파일 (약 100,00 줄 포함)을 전송해야합니다. FTP의 사용은 스크립트가 cron에서 실행되므로 파일 전송을 위해 sftp를 통해 lftp를 사용하므로 보안상의 이유로 차단됩니다.SFTP를 통해 lftp를 업로드하는 동안 파일을 찾을 수 없습니다.

문제는 PUT/MPUT 명령 SFTP로 파일을 업로드하는 동안없는 오류 발생 "넣어 : '/ 홈/applogs/ACCESS/ACCESS_LOG * : 그런 파일이나 디렉토리". "*"를 사용하여 이름이 인 모든 파일이 access_log으로 전송됩니다. 전체 파일 이름 (예 : access_log_10-06-2013_15_53_46.txt)을 입력하면 스크립트가 완벽하게 작동하지만 'access_log *'을 사용하면 시스템에서 파일을 찾을 수 없습니다. 나는 PUT과 MPUT을 시도했다.

도움이 될만한 사람이 있으면 큰 도움이 될 것입니다. 소스의

#!/bin/bash 

    IP=********** 
    USER=******** 
    PASS=******** 

    SRC='/home/applogs/ACCESS/' 
    DST='/home/db/INPUT/' 

    ###### get system time ###### 
    EXECU_TIME=`date '+%d-%m-%Y_%H_%M_%S'` 

    ###### Rename file with system timestamp ###### 
    mv access_log* access_log_$EXECU_TIME.txt 

    ###### Change file permission ###### 
    chmod 774 access_log_$EXECU_TIME.txt 


    ##### Start file transfer 
    lftp -u ${USER},${PASS} sftp://${IP}<<EOF>lftplog.txt 
    cd ${DST} 
    lcd ${SRC} 
    set net:timeout 30 
    set ftp:ssl-allow no 
    put access_log* 
    quit 
    EOF 

시스템 정보 : GNU 리눅스 대상의 2.6.9-55

시스템 정보 : GNU 리눅스 2.6.39-200.24 아래는 파일 전송 부분에 대한 내 코드입니다. 나는 희망

lftp -i -u ${USER},${PASS} sftp://${IP}<<EOF>lftplog.txt 
cd ${DST} 
lcd ${SRC} 
set net:timeout 30 
set ftp:ssl-allow no 
mput access_log* 
quit 
EOF 

: 1

+0

그냥 SRC 디렉토리에 파일이 있습니다. 그 점에 대해서는 의심의 여지가 없습니다. – Yeasir

답변

2

당신은 MPUT에 확인을 요청하는 lftp는 말할 필요 mput access_log* 시도 당신은 단지 하나의 access_log. * 파일을 가지고 "넣으십시오"

+0

@JimMcnamara에게 감사드립니다. 네, 이상적으로는 access_log _.... 파일이 1 개만 있어야합니다. 그러나 "**"를 사용하면 다른 파일 (이전 시간 파일이 전송되지 않았거나 기타 등등)이 전송 된 경우에도 전송됩니다. 그래서 put으로 정확한 파일 이름을 사용하고 싶었습니다. 다른 블로그에서 제안한 다른 작업장이 있습니다. 주 스크립트에서 나는 access_log *와 함께 ls -1을 할 수 있고, 파일 이름으로 정렬하고, 파일에 목록을 쓰고, 첫 줄에 파일을 쓰고, 문자열 변수에 넣은 다음 lftp 내부에 그 변수를 넣는다. – Yeasir