Estou procurando uma solução simples e genérica que permita executar qualquer script ou aplicativo no crontab e impedir que ele seja executado duas vezes.
A solução deve ser independente do comando executado.
Suponho que deve parecer lock && (command ; unlock)
onde o bloqueio retornará falso se houver outro bloqueio.
A segunda parte seria como se ele adquirisse o bloqueio, execute o comando e desbloqueie após a execução do comando, mesmo que retorne um erro.
echo "Locking succeeded" >&2; trap 'rm -rf /var/lock/mylock' EXIT
Não é necessário instalar um pacote sofisticado:
É mais rápido escrever esse script do que executar "apt-get install", não é? Você pode adicionar "-u $ (id -u)" ao pgrep para verificar instâncias executadas apenas pelo usuário atual.
fonte
||
operador ao mesmo tempo, antes que um deles tenha a chance de iniciar o script.Consulte também Tim Kay's
solo
, que executa o bloqueio vinculando uma porta em um endereço de loopback exclusivo para o usuário:http://timkay.com/solo/
Caso seu site seja desativado:
Uso:
Use-o assim:
Roteiro:
fonte
solo(3801): Can't assign requested address
menos que você force a0
para o terceiro parâmetro do métodopack
. O que é bom para o BSD também é bom para o Mac.Você precisa de uma fechadura.
run-one
faz o trabalho, mas você também pode querer olhar paraflock
a partirutil-linux
do pacote.É um pacote padrão fornecido pelos desenvolvedores do kernel, permite mais personalização do que
run-one
e ainda é muito simples.fonte
Uma solução simples do bash-hackers.org que funcionou para mim estava usando o mkdir . Essa é uma maneira fácil de garantir que apenas uma instância do seu programa esteja em execução. Crie um diretório com mkdir .lock que retorne
Portanto, essa função simples fez toda a lógica de bloqueio de arquivos:
fonte
Esta solução é para um script bash que precisa se verificar
fonte