반달가면 이글루에서 백업 - http://bahndal.egloos.com/540184
일단, 리눅스 shell script에서 ftp 서버에 자동으로 접속하는 법은 예전에 이미 써 두었다. 이전 게시물을 참고하면 된다. 여기로
추가적으로, 자동접속해서 파일을 올리거나 가져오는 과정이 정상적으로 잘 종료되었는지를 확인하는 과정이 필요할 수 있다. 전송 도중에 네트워크 문제로 연결이 끊어졌는지 판단할 수 있는 간단한 방법은 FTP 접속 과정을 별도의 로그 파일로 남기고 이 내용을 확인하면 된다.
우선 ftp 자동접속을 하고 접속 이후 수행되는 내용을 ftp_log.txt 파일로 저장한다. 아래의 예시를 보자.
# 192.168.0.10 서버에 접속, 이후 과정은 ftp_log.txt에 저장
ftp -n -p 192.168.0.10 << SCRIPT > ftp_log.txt
user john my_password
binary
put my_data.dat
quit
SCRIPT
ftp에서 -p 옵션은 패시브 모드(passive mode)로 접속하기 위한 것이다. 액티브 모드(active mode)로 접속하려면 생략한다.
전송이 성공적으로 이루어졌다면, ftp_log.txt 파일에 대략 아래와 같은 내용이 포함되어야 정상이다.
...
ftp> put my_data.dat
local: my_data.dat remote: my_data.dat
200 PORT command successful.
150 Ok to send data
226 Transfer complete.
...
성공적으로 전송되었다면 "226 Transfer complete" 메세지가 있어야 한다. 메세지 내용은 서버에 따라 약간 차이가 있을 수 있으니 해당 ftp 서버에 접속해서 전송시험을 한번 해 보고 메세지 순서와 내용을 미리 확인해 보자.
이제 ftp_log.txt 파일의 내용에서 성공 확인 메세지 존재 여부를 확인하면 된다. 아래의 예시를 보자.
# ftp_log.txt 파일에서 전송 성공 메세지 확인
ftp_check=`cat ftp_log.txt | grep "^226 Transfer complete\." | wc -l`
if [[ $ftp_check -eq 1 ]]
then echo "my_data.dat 파일 전송 성공"
else echo "my_data.dat 파일 전송 실패"
fi
mput 명령으로 한꺼번에 여러개의 파일을 보낼 경우에는 "226 Transfer complete" 메세지의 수와 보낸 파일의 수가 같은지 점검하면 될 듯. 아래의 예시를 보자. ~/my_data 디렉토리 안에 있는 .dat 파일을 모두 전송하는 경우이다.
# 디렉토리 이동
cd ~/my_data
# ~/my_data 디렉토리에 .dat 파일이 몇개인지 파악하여 files_num 변수에 저장
files_num=`ls *.dat | wc -l`
# ftp 전송, ftp_log.txt 파일 생성
ftp -n -p 192.168.0.10 << SCRIPT > ftp_log.txt
user john my_password
binary
prompt
mput *.dat
quit
SCRIPT
# ftp_log.txt 파일 확인
ftp_check=`cat ftp_log.txt | grep "^226 Transfer complete\." | wc -l`
if [[ $ftp_check -eq $files_num ]]
then echo ".dat 파일 전송 성공. (개수: $files_num)"
else echo ".dat 파일 전송 실패. 자세한 내용은 ftp_log.txt 파일을 참조하세요."
fi
-----
2020.11.13 추가
ftp 전송 이력이 파일에 제대로 저장되지 않는 경우 ftp 실행에 -v 옵션을 추가해 보자.
ftp -n -p -v 192.168.0.10 << SCRIPT > ftp_log.txt
...
SCRIPT
'bash script' 카테고리의 다른 글
[bash: for, sed, echo] txt 파일에서 여러줄로 된 항목을 한줄로 바꾸기 (0) | 2023.04.11 |
---|---|
[bash: find, awk] 특정 디렉토리에 있는 특정 파일들의 용량 합계 구하기 (0) | 2023.04.11 |
[bash: sort] 특정 항목(field)을 기준으로 정렬하기 (0) | 2023.04.07 |
[bash: function] 함수를 이용한 동시 작업(백그라운드 실행) (0) | 2023.04.07 |
[bash: find] 파일/디렉토리 검색 속도 향상을 위한 색인(index) 만들기 (0) | 2023.04.07 |