[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Locks nativos em shell
From: |
Felipe Kellermann |
Subject: |
Re: [shell-script] Locks nativos em shell |
Date: |
Mon, 21 Mar 2005 21:35:26 -0300 (BRT) |
On Mon, 21 Mar 2005 3:42pm -0800, Ricardo Barioni wrote:
> Não vou entrar no mérito da funcionalidade dessas
> rotinas, mas o fato é que "NENHUM deles poderá rodar
> se QUALQUER um deles JÁ estiver rodando". Algo assim:
OK, dá para fazer em uma linha com um lock :-)
> rotina faz_backup.sh:
>
> if esta_rodando ($0)
> then
> echo "backup já está sendo feito..."
> else
> if esta_rodando (salva_backup.sh)
> then
> echo "backup está sendo salvo..."
> else
> echo "fazendo o backup..."
> tar ...
> fi
> fi
>
>
> rotina salva_backup.sh:
>
> if esta_rodando ($0)
> then
> echo "backup já está sendo salvo..."
> else
> if esta_rodando (faz_backup.sh)
> then
> echo "backup está sendo feito..."
> else
> echo "salvando o backup..."
> ftp ...
> fi
> fi
OK, tu pode resumir tudo isso em um só lock - backup, digamos.
Último exemplo que está aqui: <http://fk.geek42.org/blog/?postid=15>
Se aquela verificação está em um só script, ele não vai poder executar
quando alguma outra instância dele mesmo estiver executando. Da mesma
forma, se o lock está sendo compartilhado por dois ou mais scripts
diferentes, nenhum deles vai conseguir ser executado sem que todos os
outros (que estão compartilhando o mesmo lock, recurso) estejam parados.
Aqui modificado para refletir teu exemplo. Tanto o faz_backup.sh como o
salva_backup.sh precisam, antes de executar as tarefas deles, fazer:
# Verifica os programas de backup
if [ ! exec 4<>~/recurso-backup ]; then
printf "salva_backup.sh ou faz_backup.sh já executando"
exit 1
fi
# Aqui vai o script de salva_backup.sh ou faz_backup.sh.
Se tu quiser saber qual dos dois está executando quando algum deles foi
iniciado, tu precisa fazer mais de um lock e fazer verificações do tipo
daquelas que tu fez no teu exemplo, mas um pouco mais simples.
Percebeu?
Mas eu não recomendo meus patches, obviamente :-)
Tu provavelmente tem o 'lockfile' no teu computador, ele faz um lock
parecido com o meu (até com algumas outras features interessantes, de
timeout, etc). Estou bolando um módulo zsh para fazer essas coisas e
talvez algumas outras idéias...
--
Felipe Kellermann
[As partes desta mensagem que não continham texto foram removidas]