A resposta para sua pergunta geral é: Absolutamente. Nos primórdios da computação, o processamento em lote era a única maneira de fazer qualquer coisa, e mesmo quando sistemas interativos multiusuários eram inventados, o recurso de processamento em lote era a norma para tarefas grandes. E ainda é comumente feito hoje em ambientes de médio e grande porte usando sistemas como Sun Grid Engine ou Torque .
No entanto, isso é provavelmente um exagero para o que você precisa. Você poderia configurar um sistema mais leve para executar scripts em uma fila serial, mas não acho que essa abordagem seja particularmente adequada para sua tarefa específica. Presumir cópias paralelas para unidades diferentes é aceitável, acho que eu iria atacá-lo assim:
-
Crie uma estrutura de diretório correspondente às suas unidades de destino:
~/copysystem/drive1/
%código%
~/copysystem/drive2/
-
Instale o Incron .
-
Configure uma entrada incrontab para cada um desses diretórios, que executa seu script de cópia automaticamente em IN_MOVED_TO.
-
Faça seu script a) matar quaisquer instâncias anteriores do mesmo script quando ele for iniciado ou b) use um arquivo de bloqueio baseado em ~/copysystem/drive3/
e bloqueie até que o bloqueio seja limpo. / p>
Então, tudo o que você precisa fazer é mover os arquivos para os vários diretórios mkdir
e todos eles são copiados magicamente para o seu destino.
Especialmente no caso de 4a, você provavelmente quer usar ~/copysystem/drive#
para copiar seus arquivos, para que você possa reiniciar as transferências parciais do meio. (Possivelmente em combinação com rsync -aP
, se você quiser se livrar dos originais.)
Se você quiser pular a complicação de usar o incron, você ainda pode tirar proveito de fazer o seu bloco de scripts em um arquivo de bloqueio. Isso funciona mais ou menos assim:
#!/bin/bash
LOCKDIR="/var/run/copysystem/copysystem.lock"
while ! mkdir $LOCKDIR ; do
echo "waiting for lock"
sleep 5
done
trap rmdir $LOCKDIR EXIT
rsync commands go here....
Isso funciona porque --remove-sent-files
é uma operação atômica - se tiver sucesso, você sabe que o diretório não existia. Isso é importante, porque se você usar algo como mkdir
, há uma condição de corrida. (Mesmo com a verificação da tabela de processos para comandos rsync ou algo semelhante.)