Linux: logrotate не срабатывает из cron

Автор: | 26/10/2018
 

Имеется logrotate, имеется для него daily-задача в кроне.

Проблема в том, что задача-то есть, файлы настроек для ротации логов – есть, но логи не меняются и продолжают нагло жрать место.

В статусе logrotate – срабатывания за сегодня нет:

[simterm]

root@bttrm-stage-console:~# cat /var/lib/logrotate/status
logrotate state -- version 2
"/var/log/rabbitmq/[email protected]" 2018-10-23-10:56:16
"/var/log/rabbitmq/[email protected]" 2018-10-24-12:0:49

[/simterm]

Проверяем содержимое файла крон-задачи:

[simterm]

root@bttrm-stage-console:~# cat /etc/cron.daily/logrotate 
#!/bin/sh

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

[/simterm]

Выполняем пошагово шаги в нём:

[simterm]

root@bttrm-stage-console:~# test -x /usr/sbin/logrotate
root@bttrm-stage-console:~# echo $?
0

[/simterm]

Тут всё ОК, идём дальше – выполняем /usr/sbin/logrotate /etc/logrotate.conf, но добавляем --verbose:

[simterm]

root@bttrm-stage-console:~# /usr/sbin/logrotate -v /etc/logrotate.conf
reading config file /etc/logrotate.conf
error: /etc/logrotate.conf:5 unknown group 'syslog'
removing last 0 log configs

[/simterm]

Ага – вот и проблема.

Проверяем содержимое файла настроек, ищем группу syslog:

[simterm]

root@bttrm-stage-console:~# cat /etc/logrotate.conf | grep syslog
su root syslog

[/simterm]

logrotate у нас настраивается из Ansible – SimpliField/ansible-logrotate, проверяем доступные опции:

...
logrotate_options:
- weekly
- su root syslog
- rotate 4
- create
...

Обновляем плейбук – меняем группу на adm (Debian):

...
    - role: SimpliField.logrotate
      logrotate_options:
      - su root adm
      logrotate_applications:
      - name: nginx
        definitions:
        - logs:
          - /var/log/nginx*.log
          options:
            - size 100M
            - rotate 5
            - daily
            - missingok
            - notifempty
            - compress
            - create 0640 www-data adm
            - postrotate
                systemctl reload nginx.service
            - endscript
...

Запускаем Ansible, проверяем конфиг на сервере:

[simterm]

root@bttrm-stage-console:~# cat /etc/logrotate.conf | grep su
su root adm

[/simterm]

И проверяем конфиг ещё раз:

[simterm]

root@bttrm-stage-console:~# /usr/sbin/logrotate -v /etc/logrotate.conf
reading config file /etc/logrotate.conf
including /etc/logrotate.d
Ignoring nginx.dpkg-dist, because of *.dpkg-dist pattern match
reading config file apache2
reading config file apt
reading config file chrony
reading config file dpkg
reading config file exim4-base
reading config file exim4-paniclog
reading config file nginx
reading config file php7.2-fpm
reading config file rabbitmq-server
reading config file redis-server
reading config file rsyslog
reading config file supervisor
reading config file unattended-upgrades
Reading state from file: /var/lib/logrotate/status
Allocating hash table for state file, size 64 entries
Creating new state
Creating new state

Handling 18 logs

rotating pattern: /var/log/apache2/*.log  after 1 days (14 rotations)
empty log files are not rotated, old logs are removed
switching euid to 0 and egid to 4
...

[/simterm]

И статус:

[simterm]

root@bttrm-stage-console:~# cat /var/lib/logrotate/status
logrotate state -- version 2
"/var/log/supervisor/project_1_itunes_purchases_00-stderr---supervisor-jSllQ9.log" 2018-10-25-11:0:0
"/var/log/supervisor/project_2-updates_04-stderr---supervisor-XoTsZT.log" 2018-10-25-11:0:0
"/var/log/supervisor/project_2-updates_01-stderr---supervisor-HoCWpF.log" 2018-10-25-11:0:0
...

[/simterm]

Готово.