Как очистить содержимое файла журнала перенаправления в оболочке?

Это возможно, но некрасиво:

echo {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}

Насколько я могу судить, bash не имеет понятия о шестнадцатеричных диапазонах.

1
18.08.2017, 12:56
2 ответа

Если вы хорошо разбираетесь в Perl, вы можете запустить этот небольшой скрипт:

use POSIX qw(strftime);

$fbase = "tmp-%Y-%m-%d-%H-%M.log";

while(<>)
{
  $fnamenew = strftime $fbase, localtime;

  if ($fnamenew ne $fname)
  {
    print "logging to: $fnamenew\n";
    $fname = $fnamenew;
    close OUT;
    open OUT, ">$fname";
  }
  print OUT $_;
}

Используйте его так: $mycomputation | perl-скрипт.pl. Он добавит все входные данные к имени файла, созданному из заданного шаблона времени, здесь tmp-ГГГГ-ММ-ДД-ЧЧ-MI.log. На каждой новой строке ввода шаблон перестраивается и сверяется со старым. Если он отличается, то ввод передается в новый файл, а старый закрывается.

0
27.01.2020, 23:45

Проблема в том, что ваш файл журнала остается открытым приложением, которое записывает в него данные. Если вы обрежете файл (> file.log), ваше приложение все равно будет писать в него с точки последней записи (из-за усечения, я полагаю, что ваш файл будет заполнен 0 байтами до этой точки ). Если вы переместите файл, ваше приложение продолжит запись в него, поскольку после открытия его имя не имеет значения. Если вы удалите файл, блоки не будут освобождены с диска, и приложение по-прежнему будет записывать их, даже если файл больше не виден в вашем каталоге.

Это классический сценарий. Ваше приложение должно:

  • либо периодически заново открывать файл журнала
  • или обнаружить, что он был усечен, и снова открыть его
  • или дождитесь специального сигнала, сообщающего «закройте текущий файл журнала и снова откройте его»

В противном случае вы ничего не сможете сделать извне, кроме перезапуска приложения. Затем вы должны сделать это так же, какlogrotate:

  • сначала переместите файл журнала под новым именем
  • опционально touchфайл журнала со старым именем, чтобы файл существовал
  • перезапустить приложение, чтобы принудительно прекратить запись в старый файл журнала и начать запись в новый.
1
27.01.2020, 23:45

Теги

Похожие вопросы