Как остановить logrotate от изменения владельца повернутых логов

9

У меня есть владелец файла журнала от пользователя 'apache', которого я хотел бы вращать с помощью logrotate.

Я хотел бы сделать это, запустив logrotate от имени другого пользователя, скажем, «web», используя стратегию copytruncate.

Это терпит неудачу с этой ошибкой:

error: error setting owner of ./logfile.log.1: Operation not permitted

Но только потому, что logrotate пытается изменить владельца нового файла на владельца повернутого файла, то есть apache. Но я не беспокоюсь о новых файлах, имеющих одного и того же владельца, если logrotate создаст копии с «web» в качестве владельца, что будет хорошо, и тогда это может работать нормально.

Так есть ли способ остановить logrotate от изменения владельца скопированного файла?

Левен
источник
1
Оставим это для потомков: использовать postscriptи chown "$1", вероятно, здесь неуместно, потому что это не помешает logrotate не установить владельца.
Дэвид Лорд

Ответы:

7

Я использую createдирективу в моих /etc/logrotate.d/файлах. Пример:

create 0664 www-data www-data
Павел
источник
1

createвероятно, будет делать то, что вы описываете в последнем предложении вашего вопроса, но этот вариант несовместим copytruncate, который вы также хотите использовать.

craq
источник
0

Я решил ту же проблему с опциями postrotate и prerotate:

/opt/bars/web_edu/var/log/nginx*.log {
        su web_edu web_edu
        daily
    compress
        missingok
        rotate 30
        dateext
        notifempty
        create 0644 web_edu web_edu
        sharedscripts
        prerotate
                chown web_edu:web_edu /opt/bars/web_edu/var/log/nginx*.log
        endscript
        postrotate
                [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` || true
                chown web_edu:web_edu /opt/bars/web_edu/var/log/nginx*.gz
                chown web_edu:web_edu /opt/bars/web_edu/var/log/nginx*.log
        endscript
}
Всеволод Громов
источник