Как сжаться, сохраните и пустой исходный файл с gzip

По некоторым причинам я не способен использовать logotate для сжатия файлов периодически.
Таким образом, я решил записать свой собственный сценарий, это не самая твердая вещь, но одна маленькая деталь придавливает меня.
Чтобы использование zip сжало файл, logrotate сохраняет исходные файлы, и освободите их. Я могу использовать gzip, затем отзываются эхом для достижения того же результата, но принятие моего приложения пишет много данных в журналы, будет, конечно, некоторые проиграли, входит в систему метки времени после выполнения gzip и перед эхом

gzip -k file.log
echo "" > file.log

Какая-либо идея, как я могу сделать его? Я пропускаю опцию gzip, который освобождает исходный файл? Спасибо :)

Править

Решенный путем отправки сигнала в процесс (который является сценарием узла) и осуществляют его для повторного открытия файла журнала, как предложено AlexP.

2
задан 4 December 2018 в 17:17

2 ответа

logrotate работает путем (1) переименования файла журнала, как будто используя mv, (2) создание нового файла со старым именем, (3) как-то сигнализирует процессу (-ам) о записи в файл журнала закрыть и снова открыть его (это переключит их на новый файл) и, наконец, (4) сжать переименованный файл.

Сложный шаг, конечно, (3), потому что как сказать процессу, что он должен закрыться и заново открыть свои журналы, зависит от конкретного процесса. Например, если вы посмотрите в /etc/logrotate.d/apache2, он использует команду reload для закрытия HTTP-сервера Apache и повторного открытия журналов, а /etc/logrotate.d/samba показывает, что для Samba он отправляет сигнал SIGHUP.

1
ответ дан 2 December 2019 в 03:43

Вот то, как можно сделать это, открыть терминал и тип:

cat file.log | gzip -9 > tmp_file.gz && echo > file.log
1
ответ дан 2 December 2019 в 03:43

Другие вопросы по тегам:

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