Boa noite a todos.
Pessoal preciso de uma ajuda de vocês pra entender e tentar solucionar uma situação.
Eu possuo um servidor de backup, nessa máquina tenho um script que roda um rsync em 30 máquinas de usuários.
O script que roda o rsync acessa e pastas específicas nas máquinas de usuários, monta elas no servidor, faz o clone dos arquivos, e desmonta a pasta no PC do usuário.
Esses script faz isso com um usuário após o outro em ordem alfabética até finalizar os 30.
O processo de cópia dos arquivos está ocorrendo perfeitamente.
Porém tenho um problema e é aí a minha dúvida.
Supondo que o script esteja executando o backup da maquina 20, montando a pasta e iniciando a cópia. Caso o usuário desligue o computador antes que a cópia seja finalizada e a pasta desmontada o processo fica travado, morto digamos assim. Se eu não finalizar o PID desse usuário especificamente de forma manual, todos os demais não são executados. 21, 22, 23… todos ficam no aguardo do 20 terminar pra seguir a fila.
Minha dúvida é?
Existe algum comando que identifique essa inatividade do processo, que permita que após, sei lá, 5 min sem transferir nenhum dado, esse processo de um usuário seja finalizado automaticamente e o script siga para o outro usuário.
Fico muito grato caso alguém tenha uma possível solução.
Valeu a todos.
Olá @WArmond, tudo bem contigo?
Uma das opções possíveis é adicionar o parâmetro “timeout” no seu script do Rsync, isso fará a conexão ser abortada caso não sejam transferidos dados.
--timeout=TIMEOUT
This option allows you to set a maximum I/O timeout in seconds. If no data is transferred for the
specified time then rsync will exit.
Bom dia. Já usava esta opção no comando mais parece não estar aceitando.
Está assim no script.
/usr/bin/rsync -radzvp —delete —timeout=20 /mnt/webbackup/Users/ •pasta do usuário•
Att
Você já executou o comando manualmente para ver se é exibida alguma mensagem de erro?
Outro ponto que está me chamando a atenção, os parâmetros “r” e “d” não são possuem efeito contrário entre si? Como eu nunca usei o “-d” talvez eu esteja interpretando de forma incorreta, mas, qual é o seu objetivo com ele?
Lendo o manual do Rsync encontrei o parâmetro contimeout que pode ser útil também.
Assumindo que o comando está dentro de um for, se fazer desse jeito:
for i in {1..10}; do
eval '/usr/bin/rsync -radzvp —delete —timeout=20 /mnt/webbackup/Users/ •pasta do usuário• &'
done
Cada “instância” do rsync vai ser executado em background paralelamente graças ao caractere “&”.
Assim, se alguma “instância” do rsync der timeout, não vai ser problema porquê as outras estão sendo executadas ao mesmo tempo.
Essa é uma solução interessante, apenas fique atento ao consumo de recursos do servidor.
Se o volume de dados for grande, existe a chance da cópia demorar muito mais devido à concorrência entre as conexões.