3

Я получаю GZIP-файл в пути.

Путь к входной папке:

<server>/input_gate

Я хочу проверить, является ли файл GZIP, который я получаю в этой папке, действительным? Я использовал следующую команду. Это хорошо работает, чтобы найти файл GZIP действительным или нет?

gzip -t -v <file_name>

Но когда происходит перемещение, файл отображается как недопустимый файл. Но на самом деле файл действителен после того, как движение сделано. Есть ли какой-нибудь способ узнать, находится ли файл, который я получаю, полностью перемещенный файл или перемещение все еще в процессе?

2 ответа2

0

Согласно этому ответу «Спросите Ubuntu», вы можете использовать lsof (список открытых файлов), чтобы проверить, открыт ли файл:

lsof | grep <server>/input_gate
0

Использование lsof

Чтобы проверить, есть ли у какого-либо процесса открытый файл, скажем, path/to/input_gate , выполните команду:

lsof path/to/input_gate

Это завершится с кодом 0, если есть процесс, использующий файл, и кодом 1, если никакая обработка не использует его (или произошла ошибка). Этот код выхода может использоваться командами оболочки.

тестирование

Чтобы проверить это, давайте создадим процесс, чтобы открыть наш файл:

sleep 10 >>path/to/input_gate &

Это будет держать файл открытым в течение 10 секунд. Чтобы проверить lsof , быстро выполните следующую команду:

$ if lsof path/to/input_gate >/dev/null; then echo "In use"; else echo "Not in use"; fi
In use

Подождите 10 секунд и попробуйте снова:

$ if lsof path/to/input_gate >/dev/null; then echo "In use"; else echo "Not in use"; fi
Not in use

Ожидание, пока файл не будет готов

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

while lsof path/to/input_gate >/dev/null; do sleep 1; done; echo "Finally, not in use"

Использование inotifywait

Если ваша система поддерживает inotifywait (система linux должна), то можно найти близкие события в интересующем файле:

inotifywait  "path/to/input_gate" -e close

Приведенная выше команда будет блокироваться, пока какой-либо процесс не закроет файл.

Преимущество такого подхода состоит в том, что он исключает опрос.

Недостаток этого подхода заключается в том, что он в первый раз уведомит вас о том, что какой-то процесс закрывает файл, и это может отличаться от того, что все процессы закрыли файл.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .