Bloquear pasta ao executar o cron

0

Estou configurando meu primeiro cron em um sistema Ubuntu Desktop. Eu estava curioso para saber se existe uma maneira de bloquear uma pasta antes que um cron seja executado e como configurá-lo? Estou seguindo o artigo . Eu estou apenas tentando ter certeza de que não danifico nenhum arquivo ao movê-lo de e para a pasta cron porque ele está em uma rede compartilhada.

    
por DᴀʀᴛʜVᴀᴅᴇʀ 05.02.2013 / 22:05

3 respostas

2

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:

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

    
por 06.02.2013 / 12:34
0

Isso não é ideal, mas efetivo. Você tem um diretório 'feeder' separado para o qual você copia arquivos novos, ao copiá-los na rede. Seu script cron pode então executar um / ls de / var / feeder e, em seguida, lsof cada arquivo desse diretório procurando por qualquer manipulador de arquivo aberto. Os arquivos que não estão em uso são então movidos para o diretório compartilhado principal, os arquivos que estão abertos (presumivelmente, você os está copiando ou outros) são deixados no alimentador. Certifique-se de que o diretório principal / compartilhado não seja gravável, exceto pelo seu script, e você deve ser bom.

    
por 05.02.2013 / 23:10
0

guia passo a passo para bloquear pastas no linux link

    
por 04.11.2014 / 05:07

Tags