Logrotate не посылает сигнал процессу

classic Classic list List threaded Threaded
18 messages Options
Reply | Threaded
Open this post in threaded view
|

Logrotate не посылает сигнал процессу

Sergey Kobzar-2
Linux 3.7.10-gentoo-r1 x86_64
logrotate-3.8.4

/etc/logrotate.d/nginx:
/var/log/nginx/*.log {
         daily
         rotate 5
         missingok
         nocompress
         sharedscripts
         postrotate
                 test -r /run/nginx.pid && kill -USR1 `cat /run/nginx.pid`
         endscript
}

При ротации логов бывает, что logrotate не посыдает сигнал -USR1
мастер-процессу и лог пишется в отротированный файл.

-rw-r--r--  1 nginx root 813M Aug 21 21:24 access.log
-rw-r--r--  1 nginx root 1.4G Aug 17 15:51 access.log-20130817
-rw-r--r--  1 nginx root 995M Aug 18 03:10 access.log-20130818
-rw-r--r--  1 nginx root 1.3G Aug 19 03:10 access.log-20130819
-rw-r--r--  1 nginx root 2.7G Aug 21 01:16 access.log-20130820
-rw-r--r--  1 nginx root 219M Aug 21 10:42 access.log-20130821

Например сегодня утром _access.log был нулевого размера, а логи сыпались
в access.log-20130821 (видно по времени).

Причем случается это нерегулярно. Если утром делаю kill -USR1 `cat
/run/nginx.pid`, лог начинает писаться в access.log

# cat /run/nginx.pid
11710

# ps ax | grep 11710
11710 ?        Ss     0:00 nginx: master process /usr/sbin/nginx -c
/etc/nginx/nginx.conf

Ну и не только это беда Nginx, т.к. практически каждое утро на почту
валится:

gzip: stdin: file size changed while zipping
gzip: stdin: file size changed while zipping

/etc/logrotate.conf дэфолтный.

Есть идеи? У меня закончились...

Спасибо.

Reply | Threaded
Open this post in threaded view
|

Re: Logrotate не посылает сигнал процессу

Edward Toroshchin
On Wed, Aug 21, 2013 at 09:30:40PM +0300, Sergey Kobzar wrote:
> При ротации логов бывает, что logrotate не посыдает сигнал -USR1
> мастер-процессу и лог пишется в отротированный файл.

Ты уверен, что он не посылает сигнал? Скорее nginx неправильно на этот
сигнал реагирует.

У меня недавно была такая же проблема с nginx. Оказалось, что воркеры не
могли открыть новые логи, потому что на них не было прав у пользователя
nginx.

Проверь, что происходит при отправлении USR1 мастер-процессу nginx, при
необходимости с отладочной печатью и/или strace.

Ну и права проверь тоже.

--
Edward "Hades" Toroshchin
dr_lepper on irc.freenode.org

Reply | Threaded
Open this post in threaded view
|

Re: Logrotate не посылает сигнал процессу

Sergey Kobzar-2
On 08/21/13 21:42, Edward Toroshchin wrote:

> On Wed, Aug 21, 2013 at 09:30:40PM +0300, Sergey Kobzar wrote:
>> При ротации логов бывает, что logrotate не посыдает сигнал -USR1
>> мастер-процессу и лог пишется в отротированный файл.
>
> Ты уверен, что он не посылает сигнал? Скорее nginx неправильно на этот
> сигнал реагирует.
>
> У меня недавно была такая же проблема с nginx. Оказалось, что воркеры не
> могли открыть новые логи, потому что на них не было прав у пользователя
> nginx.
>
> Проверь, что происходит при отправлении USR1 мастер-процессу nginx, при
> необходимости с отладочной печатью и/или strace.
>
> Ну и права проверь тоже.

Да, есть такая пробдема и баг открыт
https://bugs.gentoo.org/show_bug.cgi?id=473036 +
http://trac.nginx.org/nginx/ticket/376.

Ну у меня с правами все нормально:
# la /var/log/nginx/
drwxr-xr-x  2 nginx root 4.0K Aug 21 03:10 .
drwxr-xr-x 12 root  root 4.0K Aug 21 03:10 ..
...

Если посылаю сигнал ручками - все ОК.

Ну и

gzip: stdin: file size changed while zipping
gzip: stdin: file size changed while zipping

не от Nginx т.к. у него сжатие лого отключено.

P.S. Проблема воспроизводится на high load. Там, где активность копейки
- все ОК.

Reply | Threaded
Open this post in threaded view
|

Re: Logrotate не посылает сигнал процессу

Sergey Kobzar-2
On 08/21/13 21:55, Sergey Kobzar wrote:

> On 08/21/13 21:42, Edward Toroshchin wrote:
>> On Wed, Aug 21, 2013 at 09:30:40PM +0300, Sergey Kobzar wrote:
>>> При ротации логов бывает, что logrotate не посыдает сигнал -USR1
>>> мастер-процессу и лог пишется в отротированный файл.
>>
>> Ты уверен, что он не посылает сигнал? Скорее nginx неправильно на этот
>> сигнал реагирует.
>>
>> У меня недавно была такая же проблема с nginx. Оказалось, что воркеры не
>> могли открыть новые логи, потому что на них не было прав у пользователя
>> nginx.
>>
>> Проверь, что происходит при отправлении USR1 мастер-процессу nginx, при
>> необходимости с отладочной печатью и/или strace.
>>
>> Ну и права проверь тоже.
>
> Да, есть такая пробдема и баг открыт
> https://bugs.gentoo.org/show_bug.cgi?id=473036 +
> http://trac.nginx.org/nginx/ticket/376.
>
> Ну у меня с правами все нормально:
> # la /var/log/nginx/
> drwxr-xr-x  2 nginx root 4.0K Aug 21 03:10 .
> drwxr-xr-x 12 root  root 4.0K Aug 21 03:10 ..
> ...

Может потому, что owner - nginx, права на запись только у владельца, а
логи пишуться от root'а? Хотя это не должно быть проблемой...

> Если посылаю сигнал ручками - все ОК.
>
> Ну и
>
> gzip: stdin: file size changed while zipping
> gzip: stdin: file size changed while zipping
>
> не от Nginx т.к. у него сжатие лого отключено.
>
> P.S. Проблема воспроизводится на high load. Там, где активность копейки
> - все ОК.


Reply | Threaded
Open this post in threaded view
|

Re: Logrotate не посылает сигнал процессу

pva0xd
In reply to this post by Sergey Kobzar-2
В Ср, 21/08/2013 в 21:30 +0300, Sergey Kobzar пишет:
> Linux 3.7.10-gentoo-r1 x86_64
> logrotate-3.8.4
>
> /etc/logrotate.d/nginx:
> /var/log/nginx/*.log {
...
> }
>
> При ротации логов бывает, что logrotate не посыдает сигнал -USR1
> мастер-процессу и лог пишется в отротированный файл.

Как workaround стоит попробовать сделать copytruncate и может быть
вообще не посылать USR1 nginx.

--
Peter.


Reply | Threaded
Open this post in threaded view
|

Re: Logrotate не посылает сигнал процессу

Sergey Kobzar-2
On 08/22/13 21:34, Peter Volkov wrote:

> В Ср, 21/08/2013 в 21:30 +0300, Sergey Kobzar пишет:
>> Linux 3.7.10-gentoo-r1 x86_64
>> logrotate-3.8.4
>>
>> /etc/logrotate.d/nginx:
>> /var/log/nginx/*.log {
> ...
>> }
>>
>> При ротации логов бывает, что logrotate не посыдает сигнал -USR1
>> мастер-процессу и лог пишется в отротированный файл.
>
> Как workaround стоит попробовать сделать copytruncate и может быть
> вообще не посылать USR1 nginx.

Это как последнее решение. Проблема то не только Nginx касается. Просто
на нем заметней всего.

Изменил секцию postrotate:

postrotate
        test -r /run/nginx.pid && kill -USR1 `cat /run/nginx.pid` && touch
/tmp/logrotate-nginx
endscript

Посмотрим, выполняется она или нет.

P.S. Сегодня логи отротировались нормально.

Reply | Threaded
Open this post in threaded view
|

Re: Logrotate не посылает сигнал процессу

Sergey Kobzar-2
И так, имеем:

/etc/logrotate.d/nginx:

/var/log/nginx/*.log {
         daily
         rotate 5
         missingok
         nocompress
         sharedscripts
         postrotate
                 test -r /run/nginx.pid && kill -USR1 `cat
/run/nginx.pid` && touch /tmp/logrotate-nginx
         endscript
}

# la /var/log/nginx/ | grep access.log
-rw-r--r--  1 nginx root    0 Aug 23 03:10 access.log
-rw-r--r--  1 nginx root 1.3G Aug 19 03:10 access.log-20130819
-rw-r--r--  1 nginx root 2.7G Aug 21 01:16 access.log-20130820
-rw-r--r--  1 nginx root 219M Aug 21 10:42 access.log-20130821
-rw-r--r--  1 nginx root 1.1G Aug 22 03:10 access.log-20130822
-rw-r--r--  1 nginx root 1.4G Aug 23 10:59 access.log-20130823

т.е логи пишутся в access.log-20130823.


# la /tmp/logrotate-nginx
ls: cannot access /tmp/logrotate-nginx: No such file or directory

т.е. секция postrotate не выполнилась.


Пора выбрасывать logrotate на свалку?

# equery list 'logrotate'
  * Searching for logrotate ...
[IP-] [  ] app-admin/logrotate-3.8.4:0

# la /usr/portage/app-admin/logrotate/
total 72K
drwxr-xr-x   3 root root 4.0K Aug 13 19:01 .
drwxr-xr-x 227 root root  12K Aug 22 11:01 ..
-rw-r--r--   1 root root  23K Aug 13 19:01 ChangeLog
-rw-r--r--   1 root root 9.9K Aug 13 19:01 Manifest
drwxr-xr-x   2 root root 4.0K Aug 13 19:01 files
-rw-r--r--   1 root root 1.8K Jul  2 11:01 logrotate-3.8.4.ebuild
-rw-r--r--   1 root root 1.8K Jun 18 20:25 logrotate-3.8.5.ebuild
-rw-r--r--   1 root root 1.8K Aug 13 17:01 logrotate-3.8.6.ebuild
-rw-r--r--   1 root root  975 Jun 11  2012 metadata.xml

Попробую накатить версию посвежее. Явно какой-то баг...

Reply | Threaded
Open this post in threaded view
|

Re: Logrotate не посылает сигнал процессу

Alex Efros-4
Hi!

On Fri, Aug 23, 2013 at 11:03:55AM +0300, Sergey Kobzar wrote:
> Пора выбрасывать logrotate на свалку?

Я промолчал в начале обсуждения чтобы не лезть с не очень конструктивными
предложениями, но раз уж дошло до такого вопроса, то могу поделиться своим
мнением: не просто пора, с ним изначально не стоило связываться!

Изначально подход logrotate достаточно порочен: ротацией логов должен
заниматься тот, кто их пишет. Более того, если вас интересует надёжная и
единообразная работа с логами, то нужно писать _все_ логи через
специализированные приложения. А конкретно я имею в виду либо DJB'шный
multilog из пакета daemontools либо его более продвинутый форк svlogd из
пакета runit. Подробнее: http://smarden.org/runit/svlogd.8.html

Обычно в идеологии daemontools/runit супервизор сервиса запускает два
процесса - главный демон, который свои логи выдаёт на STDOUT, и связанный
с ним через конвейер демон логгирования (multilog/svlogd), который на
свой STDIN получает STDOUT главного демона и пишет его в лог-файлы.
Когда в системе все сервисы запущены через такие супервизоры то
получается, что практически все логи единообразно и надёжно пишутся,
фильтруются и ротируются через multilog/svlogd (кроме Xorg.0.log,
emerge.log и ещё парочки).

Но есть пара нюансов. Во-первых это не работает для таких сервисов как
apache или nginx т.к. у них не один лог-файл, а несколько, так что
направить их вместе на STDOUT не вариант. Во-вторых конкретно nginx иногда
нельзя запускать под супервизором daemontools/runit т.к. они несовместимы
с режимом горячего обновления nginx (если оно необходимо для вашего сайта).

В результате для демонов вроде apache/nginx используется другой подход:
через супервизор запускается несколько сервисов-логгеров multilog/svlogd,
по одному на каждый лог-файл apache/nginx, которые считывают данные из
FIFO-файлов, в который apache/nginx пишут логи.

Пример настройки логов nginx для runit:
   
    # создаём каталоги, куда будут писаться логи
    install -d -m 2750 -o log /var/log/nginx/access
    install -d -m 2750 -o log /var/log/nginx/error

    # даём сервисам svlogd доступ к этим каталогам (они будут работать от
    # юзера log, а не root)
    chown log /var/log/nginx/

    # для примера, настраиваем кол-во сохраняемых access-лог-файлов
    echo n500 >/var/log/nginx/access/config

    # заменяем файлы куда пишет логи nginx на FIFOшки
    mv /var/log/nginx/access_log{,.old}
    mv /var/log/nginx/error_log{,.old}
    mkfifo /var/log/nginx/access_log
    mkfifo /var/log/nginx/error_log

    # создаём новые сервисы (у меня сервисы runit находятся в /service/,
    # а активные сервисы в /var/service/ - это как бы аналоги /etc/init.d/
    # и /etc/runlevels/default/ - но у вас эти каталоги могут быть другими)
    mkdir /service/nginx-log-access/
    mkdir /service/nginx-log-error/
    echo 'exec chpst -u log svlogd /var/log/nginx/access/ <>/var/log/nginx/access_log' > /service/nginx-log-access/run
    echo 'exec chpst -u log svlogd /var/log/nginx/error/ <>/var/log/nginx/error_log' > /service/nginx-log-error/run
    chmod +x /service/nginx-log-access/run
    chmod +x /service/nginx-log-error/run

    # запускаем лог-сервисы
    ln -s /service/nginx-log-access/ /var/service/
    ln -s /service/nginx-log-error/ /var/service/

    # перезапускаем nginx (у меня это `sv t nginx`, у вас вероятно
    # `/etc/init.d/nginx restart`)

У меня ./run-файлы сервисов содержат в начале ещё пару строк:
    #!/bin/sh
    exec 2>/dev/null
я их для простоты описания опустил и думаю что всё будет работать и без них.

--
                        WBR, Alex.

Reply | Threaded
Open this post in threaded view
|

Re: Logrotate не посылает сигнал процессу

pva0xd
In reply to this post by Sergey Kobzar-2
В Пт, 23/08/2013 в 11:03 +0300, Sergey Kobzar пишет:
> # la /tmp/logrotate-nginx
> ls: cannot access /tmp/logrotate-nginx: No such file or directory
>
> т.е. секция postrotate не выполнилась.

Сделайте touch первой командой в списке.

--
Peter.


Reply | Threaded
Open this post in threaded view
|

Re: Logrotate не посылает сигнал процессу

Sergey Kobzar-2
In reply to this post by Alex Efros-4
On 08/23/13 12:10, Alex Efros wrote:

> Hi!
>
> On Fri, Aug 23, 2013 at 11:03:55AM +0300, Sergey Kobzar wrote:
>> Пора выбрасывать logrotate на свалку?
>
> Я промолчал в начале обсуждения чтобы не лезть с не очень конструктивными
> предложениями, но раз уж дошло до такого вопроса, то могу поделиться своим
> мнением: не просто пора, с ним изначально не стоило связываться!
>
> Изначально подход logrotate достаточно порочен: ротацией логов должен
> заниматься тот, кто их пишет. Более того, если вас интересует надёжная и
> единообразная работа с логами, то нужно писать _все_ логи через
> специализированные приложения. А конкретно я имею в виду либо DJB'шный
> multilog из пакета daemontools либо его более продвинутый форк svlogd из
> пакета runit. Подробнее: http://smarden.org/runit/svlogd.8.html
>
> Обычно в идеологии daemontools/runit супервизор сервиса запускает два
> процесса - главный демон, который свои логи выдаёт на STDOUT, и связанный
> с ним через конвейер демон логгирования (multilog/svlogd), который на
> свой STDIN получает STDOUT главного демона и пишет его в лог-файлы.
> Когда в системе все сервисы запущены через такие супервизоры то
> получается, что практически все логи единообразно и надёжно пишутся,
> фильтруются и ротируются через multilog/svlogd (кроме Xorg.0.log,
> emerge.log и ещё парочки).
>
> Но есть пара нюансов. Во-первых это не работает для таких сервисов как
> apache или nginx т.к. у них не один лог-файл, а несколько, так что
> направить их вместе на STDOUT не вариант. Во-вторых конкретно nginx иногда
> нельзя запускать под супервизором daemontools/runit т.к. они несовместимы
> с режимом горячего обновления nginx (если оно необходимо для вашего сайта).
>
> В результате для демонов вроде apache/nginx используется другой подход:
> через супервизор запускается несколько сервисов-логгеров multilog/svlogd,
> по одному на каждый лог-файл apache/nginx, которые считывают данные из
> FIFO-файлов, в который apache/nginx пишут логи.
>
> Пример настройки логов nginx для runit:
>
>      # создаём каталоги, куда будут писаться логи
>      install -d -m 2750 -o log /var/log/nginx/access
>      install -d -m 2750 -o log /var/log/nginx/error
>
>      # даём сервисам svlogd доступ к этим каталогам (они будут работать от
>      # юзера log, а не root)
>      chown log /var/log/nginx/
>
>      # для примера, настраиваем кол-во сохраняемых access-лог-файлов
>      echo n500 >/var/log/nginx/access/config
>
>      # заменяем файлы куда пишет логи nginx на FIFOшки
>      mv /var/log/nginx/access_log{,.old}
>      mv /var/log/nginx/error_log{,.old}
>      mkfifo /var/log/nginx/access_log
>      mkfifo /var/log/nginx/error_log
>
>      # создаём новые сервисы (у меня сервисы runit находятся в /service/,
>      # а активные сервисы в /var/service/ - это как бы аналоги /etc/init.d/
>      # и /etc/runlevels/default/ - но у вас эти каталоги могут быть другими)
>      mkdir /service/nginx-log-access/
>      mkdir /service/nginx-log-error/
>      echo 'exec chpst -u log svlogd /var/log/nginx/access/ <>/var/log/nginx/access_log' > /service/nginx-log-access/run
>      echo 'exec chpst -u log svlogd /var/log/nginx/error/ <>/var/log/nginx/error_log' > /service/nginx-log-error/run
>      chmod +x /service/nginx-log-access/run
>      chmod +x /service/nginx-log-error/run
>
>      # запускаем лог-сервисы
>      ln -s /service/nginx-log-access/ /var/service/
>      ln -s /service/nginx-log-error/ /var/service/
>
>      # перезапускаем nginx (у меня это `sv t nginx`, у вас вероятно
>      # `/etc/init.d/nginx restart`)
>
> У меня ./run-файлы сервисов содержат в начале ещё пару строк:
>      #!/bin/sh
>      exec 2>/dev/null
> я их для простоты описания опустил и думаю что всё будет работать и без них.
>

Спасибо за подробное описание. Я с данной системой не знаком - нужно
покопаться.

У меня по совместительству под рукой есть FreeBSD с ее newsyslog. Он
конесно менее фитчастый чем logrotate, но за годы использования под
разными нагрузками таких проблем не было. "Лучше меньше да лучше" (с)...

Reply | Threaded
Open this post in threaded view
|

Re: Logrotate не посылает сигнал процессу

Sergey Kobzar-2
In reply to this post by pva0xd
On 08/23/13 12:52, Peter Volkov wrote:
> В Пт, 23/08/2013 в 11:03 +0300, Sergey Kobzar пишет:
>> # la /tmp/logrotate-nginx
>> ls: cannot access /tmp/logrotate-nginx: No such file or directory
>>
>> т.е. секция postrotate не выполнилась.
>
> Сделайте touch первой командой в списке.

Сделал:

postrotate
        touch /tmp/logrotate-nginx; test -r /run/nginx.pid && kill -USR1 `cat
/run/nginx.pid`
endscript

Так вообще будут независимые команды.

Завтра увидим результат...

Reply | Threaded
Open this post in threaded view
|

Re: Logrotate не посылает сигнал процессу

Pavel Labushev-4
On Fri, 23 Aug 2013 16:34:14 +0300
Sergey Kobzar <[hidden email]> wrote:

> postrotate
> touch /tmp/logrotate-nginx; test -r /run/nginx.pid && kill -USR1 `cat
> /run/nginx.pid`
> endscript
>
> Так вообще будут независимые команды.
>
> Завтра увидим результат...

Можно ещё попробовать с create 640 nginx nginx, чтобы не воркеры
создавали новый файл, а сам logrotate.

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

attachment0 (853 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Logrotate не посылает сигнал процессу

Sergey Kobzar-2
In reply to this post by Sergey Kobzar-2
On 08/23/13 16:48, Pavel Labushev wrote:

> On Fri, 23 Aug 2013 16:34:14 +0300
> Sergey Kobzar <[hidden email]> wrote:
>
>> postrotate
>> touch /tmp/logrotate-nginx; test -r /run/nginx.pid && kill -USR1 `cat
>> /run/nginx.pid`
>> endscript
>>
>> Так вообще будут независимые команды.
>>
>> Завтра увидим результат...
>
> Можно ещё попробовать с create 640 nginx nginx, чтобы не воркеры
> создавали новый файл, а сам logrotate.

В /etc/logrotate.conf есть create. Из мана:

Any of the log file attributes may be omitted, in which case those
attributes for the new file will use the same values as the original log
file for the omitted attributes.

Т.е. по дефолту так и должно все работать. У файлов группа root, но это
не должно быть проблемой IMO

-rw-r--r--  1 nginx root 426M Aug 23 17:05 access.log
-rw-r--r--  1 nginx root 1.3G Aug 19 03:10 access.log-20130819
-rw-r--r--  1 nginx root 2.7G Aug 21 01:16 access.log-20130820
-rw-r--r--  1 nginx root 219M Aug 21 10:42 access.log-20130821
-rw-r--r--  1 nginx root 1.1G Aug 22 03:10 access.log-20130822
-rw-r--r--  1 nginx root 1.4G Aug 23 11:06 access.log-20130823


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

По подробней можно?

У меня до недавноего времени (месяца 2-3 назад) было все ОК. А видать
после какого-то очередного апдейта началось. Апдейты logrotate тоже были...

Reply | Threaded
Open this post in threaded view
|

Re: Logrotate не посылает сигнал процессу

Pavel Labushev-4
On Fri, 23 Aug 2013 17:07:42 +0300
Sergey Kobzar <[hidden email]> wrote:

> В /etc/logrotate.conf есть create. Из мана:
...
> -rw-r--r--  1 nginx root 426M Aug 23 17:05 access.log

Тогда пользователю nginx не нужны права на владение и запись в
директорию, достаточно r-x для группы или others. На системах без TPE
(или там, где /var/log смонтирован с noexec) лично я предпочёл бы такой
вариант, на всякий случай.

> У меня до недавноего времени (месяца 2-3 назад) было все ОК. А видать
> после какого-то очередного апдейта началось. Апдейты logrotate тоже были...

Относительно 2-3 месяцев время весьма давнее.

http://www.gentoo.org/security/en/glsa/glsa-201206-36.xml
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2011-1549
http://openwall.com/lists/oss-security/2011/03/04/16

attachment0 (853 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Logrotate не посылает сигнал процессу

Sergey Kobzar-2
In reply to this post by Sergey Kobzar-2
On 08/23/13 17:51, Pavel Labushev wrote:

> On Fri, 23 Aug 2013 17:07:42 +0300
> Sergey Kobzar <[hidden email]> wrote:
>
>> В /etc/logrotate.conf есть create. Из мана:
> ...
>> -rw-r--r--  1 nginx root 426M Aug 23 17:05 access.log
>
> Тогда пользователю nginx не нужны права на владение и запись в
> директорию, достаточно r-x для группы или others.На системах без TPE
> (или там, где /var/log смонтирован с noexec) лично я предпочёл бы такой
> вариант, на всякий случай.

Согласен. Я оунера сменил just in case. Проблема связанная с
невозможностью создания файла не возникала. А вот логи нулевых размеров
уже достали.


>> У меня до недавноего времени (месяца 2-3 назад) было все ОК. А видать
>> после какого-то очередного апдейта началось. Апдейты logrotate тоже были...
>
> Относительно 2-3 месяцев время весьма давнее.
>
> http://www.gentoo.org/security/en/glsa/glsa-201206-36.xml
> http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2011-1549
> http://openwall.com/lists/oss-security/2011/03/04/16

Т.е. >=app-admin/logrotate-3.8.0 панацея.

Ладно, посмотрим что будет после очередной ротации....

Reply | Threaded
Open this post in threaded view
|

Re: Logrotate не посылает сигнал процессу

Sergey Kobzar-2
In reply to this post by Sergey Kobzar-2
On 08/23/13 16:34, Sergey Kobzar wrote:

>> Сделайте touch первой командой в списке.
>
> Сделал:
>
> postrotate
>      touch /tmp/logrotate-nginx; test -r /run/nginx.pid && kill -USR1
> `cat /run/nginx.pid`
> endscript
>
> Так вообще будут независимые команды.
>
> Завтра увидим результат...


Вчера логи отротировались нормально. Файл /tmp/logrotate-nginx был
создан и я его удалил.


Сегодня:

-rw-r--r--  1 nginx root    0 Aug 25 03:10 access.log
-rw-r--r--  1 nginx root 219M Aug 21 10:42 access.log-20130821
-rw-r--r--  1 nginx root 1.1G Aug 22 03:10 access.log-20130822
-rw-r--r--  1 nginx root 1.4G Aug 23 11:06 access.log-20130823
-rw-r--r--  1 nginx root 868M Aug 24 03:10 access.log-20130824
-rw-r--r--  1 nginx root 1.2G Aug 25 11:50 access.log-20130825

# la /tmp/logrotate-nginx
ls: cannot access /tmp/logrotate-nginx: No such file or directory

Похоже, что баг logrotate...

Reply | Threaded
Open this post in threaded view
|

Re: Logrotate не посылает сигнал процессу

Sergey Kobzar-2
On 08/25/13 11:53, Sergey Kobzar wrote:

> On 08/23/13 16:34, Sergey Kobzar wrote:
>
>>> Сделайте touch первой командой в списке.
>>
>> Сделал:
>>
>> postrotate
>>      touch /tmp/logrotate-nginx; test -r /run/nginx.pid && kill -USR1
>> `cat /run/nginx.pid`
>> endscript
>>
>> Так вообще будут независимые команды.
>>
>> Завтра увидим результат...
>
>
> Вчера логи отротировались нормально. Файл /tmp/logrotate-nginx был
> создан и я его удалил.
>
>
> Сегодня:
>
> -rw-r--r--  1 nginx root    0 Aug 25 03:10 access.log
> -rw-r--r--  1 nginx root 219M Aug 21 10:42 access.log-20130821
> -rw-r--r--  1 nginx root 1.1G Aug 22 03:10 access.log-20130822
> -rw-r--r--  1 nginx root 1.4G Aug 23 11:06 access.log-20130823
> -rw-r--r--  1 nginx root 868M Aug 24 03:10 access.log-20130824
> -rw-r--r--  1 nginx root 1.2G Aug 25 11:50 access.log-20130825
>
> # la /tmp/logrotate-nginx
> ls: cannot access /tmp/logrotate-nginx: No such file or directory
>
> Похоже, что баг logrotate...

Накатился до logrotate-3.8.6. 3 дня - полет нормальный.

На мыло приходят нотификейшны вида

        gzip: stdin: file size changed while zipping

но главное логи ротейтятся корректно...

Reply | Threaded
Open this post in threaded view
|

Re: Logrotate не посылает сигнал процессу

Sergey Kobzar-2
On 08/28/13 12:44, Sergey Kobzar wrote:

> On 08/25/13 11:53, Sergey Kobzar wrote:
>> On 08/23/13 16:34, Sergey Kobzar wrote:
>>
>>>> Сделайте touch первой командой в списке.
>>>
>>> Сделал:
>>>
>>> postrotate
>>>      touch /tmp/logrotate-nginx; test -r /run/nginx.pid && kill -USR1
>>> `cat /run/nginx.pid`
>>> endscript
>>>
>>> Так вообще будут независимые команды.
>>>
>>> Завтра увидим результат...
>>
>>
>> Вчера логи отротировались нормально. Файл /tmp/logrotate-nginx был
>> создан и я его удалил.
>>
>>
>> Сегодня:
>>
>> -rw-r--r--  1 nginx root    0 Aug 25 03:10 access.log
>> -rw-r--r--  1 nginx root 219M Aug 21 10:42 access.log-20130821
>> -rw-r--r--  1 nginx root 1.1G Aug 22 03:10 access.log-20130822
>> -rw-r--r--  1 nginx root 1.4G Aug 23 11:06 access.log-20130823
>> -rw-r--r--  1 nginx root 868M Aug 24 03:10 access.log-20130824
>> -rw-r--r--  1 nginx root 1.2G Aug 25 11:50 access.log-20130825
>>
>> # la /tmp/logrotate-nginx
>> ls: cannot access /tmp/logrotate-nginx: No such file or directory
>>
>> Похоже, что баг logrotate...
>
> Накатился до logrotate-3.8.6. 3 дня - полет нормальный.
>
> На мыло приходят нотификейшны вида
>
>      gzip: stdin: file size changed while zipping
>
> но главное логи ротейтятся корректно...

Очень похоже на вот этот баг:
        https://fedorahosted.org/logrotate/ticket/32