В настоящее время у меня есть служба 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
/ var / logs
ежедневно
, еженедельно
, ...) cron
. Так что взгляните на /etc/cron.d/
, когда именно он будет работать Если он выполняет вращение с помощью - force
, тогда это означает, что ваша конфигурация в порядке, но logrotate
не считает, что файл нужно повернуть в это время.
Вы можете запустить logrotate -v / etc / logrotate.d / [ваш файл conf]
, и он должен предоставить сообщение о том, почему он пропускает файл. В противном случае logrotate -d
предоставит дополнительную информацию об отладке, которая, вероятно, поможет определить причину.
Однако, глядя на вашу опубликованную конфигурацию, я собираюсь предположить, что наиболее вероятная причина в том, что ничего фактически был записан в /opt/my_tests/my.log
(т.е. файл имеет размер 0), и в вашей конфигурации указано notifempty
, поэтому файл будет пропущен, если он имеет размер 0.