덮어쓰지 않고 cronjob을 통해 원격 서버에서 RPi로 mp3 파일 전송

덮어쓰지 않고 cronjob을 통해 원격 서버에서 RPi로 mp3 파일 전송

FTP를 통해 폴더의 모든 파일을 원격 서버에서 Raspberry Pi로 성공적으로 전송했지만 새 파일만 전송하고 싶습니다. 아래는 내 작업 스크립트입니다.

#!/bin/bash -vx
ftp -in IP_SERVER<<END_SCRIPT
quote USER rem_user
quote PASS rem_pass
bin
prompt:off
cd /path_to_server_files
lcd /path_to_local_files
mget *.mp3
bye
END_SCRIPT

다른 회사에 배경음악을 제공하는 회사가 있습니다. 내 접근 방식은 클라이언트에 따라 각 시스템을 연중무휴 24시간 실행하거나 다른 특정 cron 작업을 수행하도록 하는 것입니다. Raspberry Pi는 컴퓨터 대신 이 작업을 수행할 수 있는 좋은 방법입니다. 내가 아는 것은 폴더 당 하나의 크론 작업입니다. 각 폴더에는 음악 장르가 있습니다. 그래서 때때로 서버에 다른 음악을 넣고 크론 작업을 통해 일주일에 한 번씩 이러한 파일을 전송합니다. 해당 폴더의 모든 mp3 파일을 RPi로 전송하도록 설정되어 있습니다. 문제는 이미 존재하는 파일을 포함하여 모든 파일을 그곳으로 전송한다는 것입니다. 예를 들어 거기에 150개의 음악 파일을 넣으면 RPi ARM이 그다지 강력하지 않기 때문에 모든 폴더가 완료되었는지는 말할 것도 없고 해당 파일을 전송하는 데 오랜 시간이 걸릴 것입니다. 해결 방법은 기존 파일을 덮어쓰는 것이 아니라 새 파일을 덮어쓰는 것입니다. 그런 다음 잠시 후 다른 cron 작업이 *일보다 오래된 모든 파일을 삭제합니다.

검색해봤는데 ftp에는 아직 그런 옵션이 없는 것 같습니다. 그래서 덮어쓰지 않고 전송할 수 있는 wget 명령을 찾았지만 여러 파일을 전송할 수는 없습니다. 나는 wget 명령을 사용하여 위 스크립트를 변환하려고 시도했지만 성공하지 못했습니다. 이 분야에 경험이 있는 사람이 도움을 줄 수 있나요? http 문제일 수도 있습니다. 미리 감사드립니다.

wget 명령을 사용해 보았습니다.

* * * * * wget -r -l1 -N -A.mp3 'ftp://serverUser:Password@serverIP/path_to_server_files' /var/www/rd/musica/teste/ftp11.log 2>&1

실수:

ftp://serverUser:Password@serverIP/path_to_server_files: Bad Port Number

/var/www/rd/musica/teste: Scheme Missing

rsync에 대한 나의 시도는 다음과 같습니다.

rsyncd.conf: (모든 자격 증명이 올바른지 확신할 수 없으므로 수정할 수 있도록 각 파일을 여기에 넣습니다.)

lock file = /var/run/rsync.lock
lock file = /var/log/rsyncd.log
pid file = /var/run/rsync.pid

[documents]
  path = /var/www/rd/musica/teste
  comment = The documents folder of localusername
  uid = localusername
  gid = localusername
  read only = no
  list = yes
  auth users = serverusername
  secrets file =/etc/rsync.secrets
  hosts allow = serverIP/255.255.255.0

rsyncd.secrets

localuser:password
serveruser:password

rsync 명령을 실행합니다:

rsync -rtv serverusername@serverIP::documents/path_to_server_files/*.mp3 /path_to_local_destination_folder

다음 오류를 반환합니다.

rsync: failed to connect to serverIP (serverIP): Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(122) [Receiver=3.0.9]

답변1

본 적 있나요?동기화? 귀하의 질문을 제가 해석한 방식으로 볼 때 이는 귀하가 원하는 것과 정확히 일치해야 합니다. 하는 방법에 대한 설명입니다rsync 데몬 설정SSH 연결이 필요하지 않습니다.

답변2

당신은 소스 FTP에 "오래된" 파일을 보관하고 있지 않습니까? 이 경우 로컬 디렉터리를 업데이트/동기화하는 완벽한 도구는 다음 명령이 lftp있는 입니다 .mirror

lftp -e 'mirror remoteDir localDir;exit' -u 'remoteUser:remotePassword' remoteHost

ing 전에 동기화 하기 위해 실행( ) 명령을 사용 remoteHost하여 연결합니다 .remoteUserremotePassword-emirrorremoteDirlocalDirexit

매뉴얼 페이지:http://lftp.yar.ru/lftp-man.html

lftp는 모든 RPi 배포판의 패키지 저장소에서 사용할 수 있어야 합니다. 이전에 ArchLinux를 실행하는 RPi에서 직접 사용해 본 적이 있습니다.

답변3

해결책 - 이 스크립트가 작동하도록 했습니다. 모든 지원에 감사드립니다. 이 문제를 알아낼 충분한 시간이 있으면 계속해서 다른 옵션을 시도해 보고 작동하도록 하겠습니다.

#!/usr/bin/python
import os
from ftplib import FTP

local_path='/path_to_local_files/'
os.chdir(local_path)
ftp = FTP(host='server_name_or_IP',user='username', passwd='password')
ftp.cwd('/path_to_local_files/')
f_list = ftp.nlst()
for f in f_list:
if not f.endswith("mp3"):
  continue
new_f_name = local_path + f
if os.path.exists(new_f_name):
  continue
print("Copying remote file <{0}>to local file <{1}>".format(f,new_f_name))
ftp.retrbinary('RETR '+ f, open(new_f_name,'wb').write)

스크립트가 작동하려면 이를 설치해야 할 수도 있습니다.

sudo apt-get install python-dev

관련 정보