Назад | Перейти на главную страницу

Как вручную повернуть журнал без logrotate в открытом / живом файле?

Мой Google-Fu приближает меня, но не совсем, и я думаю, что я слишком зеленый в Linux, чтобы складывать части вместе.

У меня очень большой файл журнала размером> 200 ГБ, в который все еще ведется запись. Logrotate не доберется до него вовремя, прежде чем дисковое пространство станет проблемой. Кроме того, я не хочу запускать еще один раунд logrotate, потому что я не хочу, чтобы он влиял на все другие цели в своей конфигурации. Я добавил новую строфу в свой logrotate.conf файл как таковой:

/log/myDevice/myDevice.log {
  compress
  daily
  rotate 360
  maxage 360
  missingok
  compresscmd /usr/bin/xz
  dateext
  compressext .xz
  copytruncate
  olddir /log/archive/myDevice
}

Я хотел бы сделать это вручную:

  1. copytruncate: захватить текущий файл журнала, но разрешить syslog-ng продолжать работу с текущим открытым / живым файлом
  2. (не выше в logrotate.conf) split : чтобы разбить текущий рулон журнала на более мелкие части
  3. xz : сжать в архивную папку

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

Я попытался sudo mv myDevice.log ZmyDevice.log && touch myDevice.log, но syslog-ng просто перемещается с исходным файлом (и его новым именем) и весело продолжает запись. Это немного изменилось с тех пор, как я подумал о том, как на файл ссылается syslog-ng.

Итак, я пытаюсь понять, как сделать какое-то руководство copytruncate для того, чтобы разрезать файл на другой, как бы «на месте», и позволить syslog-ng продолжать делать то, что он хочет.

Переместите файл, затем отправьте SIGHUP процессу syslog-ng:

kill -HUP

что заставит его повторно открыть все открытые файлы, тем самым освободив файл, который вы только что переместили / переименовали, и позволив вам продолжить. Затем он откроет /log/myDevice/myDevice.log fresh и начнет писать в него.

Найдите, в каких процессах файл открыт: fuser /path/to/file. Затем используйте kill -SIGSTOP чтобы приостановить процесс (ы), который записывает в файл. Затем поверните файл, скопируйте его, обрежьте, все, что вам нужно, затем возобновите процесс (ы) с помощью kill -SIGCONT.