PDJJ14 WIKI : Linux 에서 주기적 FTP 전송 프로그램 구현 내용 및 설치 방법
Created by 한재중 on 1월 06, 2020
1. 작성 배경
- KARI 와 지리원 간은 연구망으로 네트워크 연결이 되어 있음
- 지리원의 연구망 설치 컴퓨터는 리눅스 OS 를 사용한다고 함
- 지리원에서 KARI 로 데이터를 주기적으로 전송해줘야 하는데 프로토콜은 FTP 를 사용해야 함
- 따라서 리눅스 OS 환경에서 주기적으로 특정 폴더에 존재하는 데이터를 FTP 를 통해 KARI 로 전송해야 하는 프로그램 개발이 필요했음
2. 프로그램 구현 내용
19. 언어 선정
- Windows 와 Linux 에서 코드의 변경 없이 크로스 컴파일이 가능한 언어 선정 필요
- 후보 언어들 중, 개발 편의성이 높고 플랫폼 설치가 용이한 Google 의 GO 선정
20. GO 설치 방법
- Windows
- 아래 페이지에서 윈도우용 설치 파일 다운 받아서 더블 클릭하여 설치과정 진행하면 설치 끝!!
- Linux
- 특정 폴더에 tar 파일 압축해제하고 환경 변수 설정만 해 주면 끝남
- 아래 페이지 참고해서 설정하면 됨
21. 프로그램 설명
- Json 설정 파일에 ftp 서버 접속 정보 및 수행 주기 설정
{
"serverAddr": "192.168.1.1", // FTP Server 접속 주소
"port": 21, // FTP Server 접속 포트
"id": "ftpTest", // FTP Server 접속 계정 ID
"pw": "ftpTest", // FTP Server 접속 계정 Password
"remote": "/home/temp", // 파일을 전송할 폴더
"sourceDir": "./", // (현재 사용하지 않음) 전송 대상 폴더
"fileFilter": "*.icp", // 전송 대상 파일 필터
"renameDir": "transferred/", // 전송 완료한 파일을 이동시킬 폴더 (폴더 경로는 반드시 존재해야 함)
"logFileNameWithoutExtension": "Log/log_", // 전송 로그 경로 및 파일 접두어 (폴더 경로는 반드시 존재해야 함)
"intervalInSec": 60 // 전송 시도 주기 (sec)
}
- 프로그램은 정해진 주기마다 Source Dir 에 있는 전송 대상 파일들을 정해진 FTP Server 의 특정 폴더로 전송시킴
- 전송을 성공한 파일은 설정된 전송 완료 폴더로 이동시킴
- 전송 결과를 로그에 기록
2019-12-04 16:26:31.4749999 +0900 KST m=+0.110702701>>> Successfully Opened ./ftpConfig.json
2019-12-04 16:26:31.4769952 +0900 KST m=+0.112698001>>> {pdjj14.synology.me 21 ftpTest ftpTest /home/temp ./ *.icp transferred\ Log\log_ 30}
2019-12-04 16:27:01.9834079 +0900 KST m=+30.619110701>>> FTP Uploading is started.
2019-12-04 16:27:03.3517478 +0900 KST m=+31.987450601>>> Succeeded to upload file: x - 복사본 - 복사본.icp <nil>
2019-12-04 16:27:03.4444996 +0900 KST m=+32.080202401>>> Succeeded to move file: <source: x - 복사본 - 복사본.icp>, <target: transferred\x - 복사본 - 복사본.icp> <nil>
2019-12-04 16:27:03.5013483 +0900 KST m=+32.137051101>>> Succeeded to upload file: x - 복사본.icp <nil>
2019-12-04 16:27:03.5023453 +0900 KST m=+32.138048101>>> Succeeded to move file: <source: x - 복사본.icp>, <target: transferred\x - 복사본.icp> <nil>
2019-12-04 16:27:03.5382517 +0900 KST m=+32.173954501>>> Succeeded to upload file: x.icp <nil>
2019-12-04 16:27:03.5392468 +0900 KST m=+32.174949601>>> Succeeded to move file: <source: x.icp>, <target: transferred\x.icp> <nil>
2019-12-04 16:27:03.5402451 +0900 KST m=+32.175947901>>> FTP Uploading is terminated.
- 프로그램 코드
22. offline 에서 프로그램 구동 가능하도록 설정하는 법
- 아래 파일을 복사하고 특정 공간에 압축해제
- go_linux.tar
- 파일이 존재하는 폴더에 압축해제
- 특정 폴더에 압축해제
- tar -C (경로) -xvf go_linux.tar
- 압축해제한 폴더 경로를 포함하여 PATH 설정
export PATH=(압축해제 대상 폴더 경로)/go/bin:$PATH
echo $PATH //경로 추가된 것 확인
- 실행 코드 복사 (FTPTransferGolang 폴더 복사)
- 빌드 및 실행
go build ./FtpTransfer.go
./FtpTransfer
23. 복사 관련 이슈
- Linux 장비에 바로 접근이 가능하면 USB 를 이용하여 파일 복사 수행
- Windows 장비에서 Linux 장비로 원격 연결을 해야 할 경우 WinSCP 를 이용하여 파일 복사
3. Test 결과
24. Windows 환경
- Windows 10 환경에서 코드 개발
- Linux FTP Server 를 대상으로 파일 전송 테스트 수행 및 성공
25. Linux 환경
25.5. 개인 Synology 서버
- Windows 10 환경에서 개발된 코드를 그대로 복사해서 다시 컴파일
- Linux FTP Server 를 대상으로 파일 전송 테스트 수행 및 성공
25.6. 회사 Linux 서버
- 이태경 팀장에게 Linux 서버의 접속 계정 할당 받음
- 192.168.30.74 / jjhan / eng2~
- Windows 10 환경에서 개발된 코드를 그대로 복사해서 다시 컴파일
- Linux FTP Server 를 대상으로 파일 전송 테스트 수행 및 성공