Мой 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
}
Я хотел бы сделать это вручную:
split
: чтобы разбить текущий рулон журнала на более мелкие части 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
.