Shell - Как я могу заставить Logrotate ждать, пока файл не будет скопирован / записан, а затем продолжить - PullRequest
0 голосов
/ 30 августа 2018

У меня большой лог-файл, который копирует cron в / var / log / каждый час. Через несколько минут logrote начинает работу с архивированием и переименованием.

Моя проблема в том, что процесс копирования еще не завершен. В результате скопированные файл журнала и архив повреждены.

Так что я хочу, это shell-скрипт, который проверяет скопированный файл и проверяет, используется ли он.

#!/bin/bash
until err_str=$(lsof /var/log/logfile.txt 2>&1 >/dev/null); do
  if [ -n "$err_str" ]; then
    # lsof printed an error string, file may or may not be open
    echo "lsof: $err_str" >&2

    # tricky to decide what to do here, you may want to retry a number of times,
    # but for this example just break
    break
  fi

  # lsof returned 1 but didn't print an error string, assume the file is open
  sleep 1
done

Это не работает, что с ним не так?

1 Ответ

0 голосов
/ 31 августа 2018

Вы можете попробовать использовать-

while err_str = $ (lsof /var/log/logfile.txt 2> / dev / null); делать if [-z "$ err_str"]; то

...