Назад | Перейти на главную страницу

такое gunzip атомарно?

У меня есть два сценария, которые следят за каталогом (теплое резервирование postgres)

один сценарий копирует сжатые файлы в каталог, а затем распаковывает их.

другой сценарий отслеживает несжатые файлы и затем загружает их в postgres.

Мне интересно, могу ли я его случай, когда скрипт ingestor мог читать выходные данные gunzip, пока он его писал?

вкратце: делает ли gunzip

  1. распаковать, а затем изменить имя
  2. скопировать в новое имя, поскольку оно распаковывает
  3. что-то другое

Вероятно, не рекомендуется основывать правильность сценариев на предположениях о том, как конкретная утилита (например, gunzip) работает, поскольку внутреннее поведение утилиты может измениться в последующих выпусках. Вместо этого я рекомендую вам использовать правильные методы блокировки (которые предусмотрены вашей конкретной ОС) для обеспечения взаимного исключения. Большинство дистрибутивов Linux предоставляют flock для использования в сценариях оболочки.

Это не атомарно, как вы можете увидеть, если сделаете ls во время большого сжатия:

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