У меня есть два сценария, которые следят за каталогом (теплое резервирование postgres)
один сценарий копирует сжатые файлы в каталог, а затем распаковывает их.
другой сценарий отслеживает несжатые файлы и затем загружает их в postgres.
Мне интересно, могу ли я его случай, когда скрипт ingestor мог читать выходные данные gunzip, пока он его писал?
вкратце: делает ли gunzip
Вероятно, не рекомендуется основывать правильность сценариев на предположениях о том, как конкретная утилита (например, 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