Когда у вас мало места на диске, когда файл журнала занимает несколько ГБ, и у вас не остается места на диске, что лучше всего делать без потери журналов?
Вещи, которые я пробовал, - это mv файл журнала и сжатие, но это будет отображаться как удаленное в lsof, что может стать проблемой в будущем.
Возможно, сжать файл журнала и убить -1 процесс. Но разве это то, что вы делаете на производственном сервере для таких сервисов, как httpd и mysql?
Спасибо.
Обь
Если хранилище заполнено на 100%, сжатие не будет работать, так как нет места для временного файла.
Скопируйте журналы в другое хранилище. scp -r /var/log/ otherhost:
Просмотрите и удалите старые файлы журналов. find /var/log -mtime +7
При необходимости разверните файловую систему.
Сжимайте несколько больших файлов. Перезагрузите службы, чтобы открыть новый файл журнала. gzip /var/log/httpd/access_log ; systemctl reload httpd.service
Реализуйте logrotate или аналогичный сценарий для автоматического управления ими. Обычный шаблон - переместить текущий файл под новое имя и повторно открыть новый файл журнала.
Вместо этого рассмотрите возможность реализации удаленного сервера журналов и отправки журналов с хоста.
Приемлемо ли отправка сигнала службе или иная его перезагрузка - решать вам. Конечно, вы можете попробовать это на тестовой системе, если это вас нервничает.
Если вы не говорите службе открыть новый файл, есть другой вариант: усечь на месте. cp /dev/null file.log
или вариант logrotate copytruncate
. Однако остерегайтесь предупреждения о том, что это не является атомарным, на странице руководства lograte:
Обратите внимание, что между копированием файла и его усечением есть очень маленький промежуток времени, поэтому некоторые данные журнала могут быть потеряны.
для apache используйте сигнал USR1:
и для команды mysql flush logs:
но, вероятно, вам будет лучше использовать logrotate для ротации журналов, и обычно он поставляется с конфигурациями для apache / mysql, которые в основном делают это за вас и журналов gzips. Это обычная практика на производственных серверах.