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
mkdir
para criar um diretório de bloqueio para evitar instâncias sobrepostas - use
find
com-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
xargs
para processar os arquivos um de cada vez,"{}"
é substituído pelo nome do arquivo - use
nomes de arquivos terminados comfind | xargs
find
para 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.