Um script simples com bloqueio e um atraso antes de acessar os arquivos:
#!/bin/sh
if mkdir /tmp/myscript-running; then
cd /mnt/share/whereever
find . -type f -mmin +1 -print0 | xargs -i -n 1 -0 myscript.sh "{}"
rmdir /tmp/myscript-running
else
: # previous instance still running, do nothing
fi
GNU find ou equivalente necessário para a opção -mmin . Você pode executar isso quantas vezes for necessário via cron. Substitua myscript.sh pelo seu script de processamento.
As principais características são:
- use
mkdirpara criar um diretório de bloqueio para evitar instâncias sobrepostas - use
findcom-mmin +1, que limita a saída para arquivos modificados há mais de 1 minuto, para tentar garantir que novos arquivos sejam copiados totalmente - use
xargspara processar os arquivos um de cada vez,"{}"é substituído pelo nome do arquivo - use
nomes de arquivos terminados comfind | xargsfindpara que nomes de arquivos problemáticos não causem problemas
Você deve poder modificar os parâmetros uploading/ para corresponder ao que precisa. Você também pode usar a lógica acima para mover arquivos completos de um " ready/ " para um diretório " lockfile ", o que pode simplificar as coisas.
O Ubuntu também tem shlock e %code% , o que pode ser útil, veja a página de manual do último para mais ideias.