bash script2023. 4. 11. 11:24

 

 

반달가면 이글루에서 백업 - 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

728x90
Posted by 반달가면