Transferindo arquivos mp3 de um servidor remoto via cronjob para o RPi sem sobrescrever

2

Consegui transferir todos os arquivos de uma pasta via ftp de um servidor remoto para um framboesa, mas gostaria de transferir apenas os novos. Abaixo está o script de trabalho que eu tenho.

#!/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

Eu tenho uma empresa que fornece música de fundo para outras empresas. Meu método estava deixando um computador em cada um jogando 24/7 ou com outros trabalhos agendados específicos, dependendo do cliente. E o framboesa é uma ótima maneira de fazer isso em vez de um computador. O método que tenho direito sabe que está funcionando é um trabalho cron por pasta. Cada pasta tem um tipo de música. Então, eu colocarei música diferente de vez em quando no servidor e a tarefa cron transferirá esses arquivos uma vez por semana. Está configurado para transferir todos os arquivos mp3 nessa pasta para o RPi. A coisa é, ele irá transferir todos os arquivos lá, incluindo os que já estavam lá. Se eu colocar lá, por exemplo, 150 arquivos de música, vai demorar muito tempo para transferi-los, para não mencionar se é feito com todas as pastas, já que o RPi ARM não é tão poderoso. A solução não seria sobrescrever os arquivos já existentes, apenas os novos. Então, depois de algum tempo, outra tarefa do cron excluirá todos os arquivos com mais de * dias.

Eu procurei, mas parece que o ftp ainda não tem uma opção como essa. Então eu encontrei o comando wget que permite transferir sem sobrescrever, mas não consegui transferir vários arquivos. Eu tenho tentado converter o script acima com o comando wget sem sucesso. Alguém com experiência neste assunto pode ajudar? Pode ser um problema com o http também. Agradecemos antecipadamente.

Eu tentei com o comando wget:

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

Erros:

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

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

Esta é a minha tentativa com o rsync:

O rsyncd.conf: (Não tenho certeza se todas as credenciais estão corretas, então colocarei todos os arquivos aqui para que possam ser corrigidos.)

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

comando para executar o rsync:

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

Ele retorna esses erros:

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]
    
por angelfmf 15.07.2015 / 16:55

3 respostas

0

SOLUÇÃO - Eu tenho esse script para funcionar. obrigado por todo o apoio que você deu, Se eu tiver tempo suficiente para trabalhar nisso, vou continuar tentando as outras opções e fazê-las funcionar também.

#!/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)

pode ser necessário instalar isso para que o script funcione:

sudo apt-get install python-dev
    
por 17.07.2015 / 16:09
1

Você examinou o rsync ? De como eu interpreto sua pergunta, isso deve realizar exatamente o que você quer. Aqui está uma descrição de como configurar um daemon rsync para conectar sem ssh.

    
por 16.07.2015 / 12:42
0

Você mantém os arquivos "velhos" er no ftp de origem, não é? Se esse for o caso, a ferramenta perfeita para atualizar / sincronizar seus diretórios locais seria lftp , que apresenta um comando mirror :

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

Isso se conectaria a remoteHost como remoteUser usando remotePassword , depois executaria ( -e ) o comando mirror para sincronizar remoteDir para localDir antes de exit ing.

Página MAN: link

O lftp deve estar disponível nos repositórios de pacotes de todas as distribuições RPi - eu mesmo usei isso antes em um RPi rodando o ArchLinux.

    
por 16.07.2015 / 19:01