Movendo arquivos grandes com o cronjob: O que acontece se mv ainda estiver em execução na próxima execução? [duplicado]

0

Em um sistema headless do Ubuntu 16.04, eu tenho dois diretórios. Eu quero um cronjob para mover todos os arquivos do diretório A para o diretório B (mesma partição, mesmo disco rígido, mesmo sistema de arquivos etc.). O problema é / pode ser: Os arquivos serão bastante grandes e, por alguns motivos, o cronjob tem que ser executado com bastante frequência, como a cada minuto.

Portanto, o seguinte cenário é bastante provável: cronjob inicia pela primeira vez, encontra um arquivo grande no diretório A, começa a movê-lo para o diretório B. Enquanto o processo mv ainda está em execução, o cronjob é executado pela segunda vez . Isso causará algum problema?

Eu encontrei esta pergunta e ansers O que acontece quando vários processos tentam reproduzir os mesmos arquivos entre dois sistemas de arquivos diferentes , mas eu acho que são processos iniciados simultaneamente. Espero que haja uma maneira de os cronjobs evitarem comportamentos indesejáveis.

    
por cis 29.06.2017 / 08:08

1 resposta

2
% bl0ck_qu0te%

Pode sim.

Geralmente, aconselho criar um script, colocar um bloqueio de exclusão mútua (MUTEX) nesse script e interromper a execução do script se o bloqueio existir e remover o bloqueio quando o "mv" for concluído a partir do primeiro cronjob.

Um exemplo muito básico:

if mkdir /var/lock/mylock; then
  mv your_file /to/a/directory/
  rm -rf /var/lock/mylock
else
  exit 1
fi
    
por Rinzwind 29.06.2017 / 08:24