Предполагается, что logrotate работает только в журналах внутри / var / log?

В настоящее время у меня есть служба systemd на машине Ubuntu 18.04 , которая перенаправляет StandardOuput и StandardError к настраиваемому пути:

StandardError=file:/opt/my_tests/my.log
StandardOutput=file:/opt/my_test/my.log

Но я хотел бы добавить ротацию журналов и избежать проблем с дисковым пространством в будущем. Я нашел способ добиться этого с помощью logrotate , потому что другое решение ( journald.conf ) требует, чтобы я имел журнал в / var / log / journal / .

После нескольких тестов со следующим файлом внутри /etc/logrotate.d/

/opt/my_tests/my.log {
    missingok
    rotate 10
    maxsize 200k
    copytruncate
    compress
    notifempty
    create 0640 my_user my_user
    dateext
    dateformat -%Y_%m_%d-%H_%M_%S
    postrotate
        echo "A rotation took place"
    endscript
}

я мог вращать только при запуске sudo logrotate /etc/logrotate.conf --force независимо от размера или времени (например, ежечасно , ежедневно или maxsize ). Я что-то упустил? Может ли быть другое решение для ротации журналов по индивидуальному пути?

Вывод команды sudo logrotate -v /etc/logrotate.d/my_conf:

rotating pattern: /opt/my_tests/my.log  1048576 bytes (10 rotations)
empty log files are not rotated, log files >= 204800 are rotated earlier, old logs are removed
considering log /opt/my_tests/my.log
  Now: 2020-10-23 21:00
  Last rotated at 2020-10-27 18:13
  log needs rotating
rotating log /opt/my_tests/my.log, log->rotateCount is 10
Converted ' -%Y_%m_%d-%H_%M_%S' -> '-%Y_%m_%d-%H_%M_%S'
dateext suffix '-2020_10_23-21_00_30'
glob pattern '-[0-9][0-9][0-9][0-9]_[0-9][0-9]_[0-9][0-9]-[0-9][0-9]_[0-9][0-9]_[0-9][0-9]'
copying /opt/my_tests/my.log to /opt/my_tests/my.log.log-2020_10_23-21_00_30
truncating /opt/my_tests/my.log.log
running postrotate script
A rotation took place
compressing log with: /bin/gzip
removing old log /opt/my_tests/my.log.log-2020_10_26-20_32_32.gz
0
задан 27 October 2020 в 13:36
2 ответа
  • logrotate работает в любом каталоге, который вы настраиваете, а не только в / var / logs
  • , в вашей конфигурации отсутствует период , когда должно произойти ротация ( ежедневно , еженедельно , ...)
  • в Ubuntu задание logrotate запускается cron . Так что взгляните на /etc/cron.d/ , когда именно он будет работать
  • , в зависимости от вашей конфигурации, может пройти несколько дней, пока logrotate фактически не повернет файл
2
ответ дан 4 January 2021 в 09:18

Если он выполняет вращение с помощью - force , тогда это означает, что ваша конфигурация в порядке, но logrotate не считает, что файл нужно повернуть в это время.

Вы можете запустить logrotate -v / etc / logrotate.d / [ваш файл conf] , и он должен предоставить сообщение о том, почему он пропускает файл. В противном случае logrotate -d предоставит дополнительную информацию об отладке, которая, вероятно, поможет определить причину.

Однако, глядя на вашу опубликованную конфигурацию, я собираюсь предположить, что наиболее вероятная причина в том, что ничего фактически был записан в /opt/my_tests/my.log (т.е. файл имеет размер 0), и в вашей конфигурации указано notifempty , поэтому файл будет пропущен, если он имеет размер 0.

2
ответ дан 4 January 2021 в 09:18

Теги

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