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

Я использую redirect для записи вывода вывода println в файл xxx.log . Но я хочу переместить информацию журнала в отдельный файл с именем текущей даты дня, например, 2017-08-18.log by crontab.

Я попытался использовать > xxx.log shell, чтобы очистить файл xxx.log , но все восстановление содержимого при генерации нового журнала.

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

ОБНОВИТЬ

  1. После выполнения > xxx.log xxx.log файла xxx.log равен 0. Но если мое приложение напечатает новый журнал, xxx.log не только содержит новую информацию о журнале, но также содержит ранее очищенную информацию журнала.
  2. После использования mv xxx.log xxx2.log , новая информация о журнале будет записываться в xxx2.log Но если я использую rm xxx.log вместо переименования, действие журнала остановится. Кроме того, процесс, вызванный nohup java -jar xxx.jar > xxx.log 2>&1 & если вы знакомы с playframework , файл выполнения создается командой dist для генерации файла jar.
  3. ps wx|grep "xxx.*.log output:
    1) 3912 pts/10 S+ 0:00 grep --color=auto xxx.log
    2) 26234 pts/10 Sl 0:16 /usr/lib/jvm/jdk1.8.0_111/bin/java -Duser.dir=...something ignored... play.core.server.ProdServerStart (это процесс выполняется команда)

Надеюсь, это будет полезно, спасибо еще раз!

2 Solutions collect form web for “Как очистить содержимое файла журнала ретрансляции в оболочке?”

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

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

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

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

  • сначала переместите файл журнала под новым именем
  • при необходимости touch файла журнала с его старым именем, чтобы файл существовал
  • перезапустите приложение, чтобы заставить его прекратить запись в старый файл журнала и начать запись на новый.

Если у вас все в порядке с 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 $_; } в 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 script.pl $mycomputation | perl script.pl . Он будет добавлять все входные данные к имени файла, созданному из заданного шаблона времени, здесь tmp-YYYY-MM-DD-HH-MI.log . На каждой новой строке ввода шаблон перестраивается и проверяется на старый. Если он отличается, то вход передается в новый файл, а старый – закрыт.

  • Почему эти две команды «cat» приводятся по-разному?
  • Ввод вывода / dev / tty в переменную
  • пароль для паролей `sudo` и другие данные для команды sudo`ed
  • Что означает выражение $ (<"dir / file") в bash?
  • запуск сервера с nohup и перенаправление ввода, вывод
  • Перенаправить вывод сценария в / dev / tty1, а также отобразить вывод в файл
  • Исключение отдельных строк от перенаправления
  • Выход, превышающий высоту окна терминала
  • Как перенаправить вывод sqlite3 в файл
  • Как выводить на экран переопределение перенаправления
  • Захват вывода / перенаправления команд, скопированных с помощью &&
  • Linux и Unix - лучшая ОС в мире.