é gunzip atômico?

2

Eu tenho dois scripts que assistem a um diretório (postgres warm-standby)

um script copia arquivos compactados para o diretório e os descompacta.

o outro script procura os arquivos descomprimidos e, em seguida, os ingere em postgres.

Estou imaginando se eu poderia ter um caso em que o script ingestor pudesse ler a saída do gunzip enquanto ele estava sendo escrito?

em resumo: gunzip

  1. descompacte e mude o nome
  2. copie para o novo nome ao descompactar
  3. outra coisa
por Arthur Ulfeldt 08.11.2010 / 22:48

2 respostas

1

Não é atômico, como você pode ver se faz um ls durante uma compactação grande:

dfranke@alatar:~$ dd if=/dev/zero of=bigfile bs=1M count=3072
3072+0 records in
3072+0 records out
3221225472 bytes (3.2 GB) copied, 39.1106 s, 82.4 MB/s
dfranke@alatar:~$ gzip bigfile &
[1] 19876
dfranke@alatar:~$ ls -l bigfile*
-rw-r--r-- 1 dfranke staff 3221225472 2010-11-08 17:16 bigfile
-rw------- 1 dfranke staff     114688 2010-11-08 17:18 bigfile.gz
dfranke@alatar:~$ ls -l bigfile*
-rw-r--r-- 1 dfranke staff 3221225472 2010-11-08 17:16 bigfile
-rw------- 1 dfranke staff     212992 2010-11-08 17:18 bigfile.gz
    
por 08.11.2010 / 23:18
1

Provavelmente não é uma boa idéia basear a exatidão de seus scripts em suposições sobre como um determinado utilitário (como gunzip ) funciona, já que o comportamento interno de um utilitário pode mudar em versões subseqüentes. Eu recomendo, em vez disso, que você use os métodos de bloqueio adequados (conforme fornecido pelo seu sistema operacional) para garantir a exclusão mútua. A maioria das distribuições do Linux fornece flock para uso em scripts de shell.

    
por 08.11.2010 / 23:14