shell-script-pt
[Top][All Lists]
Advanced

[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]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]