[devel] План роста packages.altlinux.org (was: Re: sisyphus.ru)

Igor Zubkov igor.zubkov на gmail.com
Вт Фев 12 19:10:16 MSK 2013


2013/2/12 Dmitry V. Levin:
> On Tue, Feb 12, 2013 at 03:43:56PM +0200, Michael Shigorin wrote:
>> On Tue, Feb 12, 2013 at 03:32:11PM +0200, Igor Zubkov wrote:
>> > Получается что access.log ротейтнулся, но не зажался. И nginx в
>> > него всё ещё пишет. Так и место когда-то закончится. Его надо
>> > рестартовать после logrotate. Баг сейчас повешу.
>>
>> А теперь подумай, что будет с логами, если отодвинуть,
>> зажать и удалить последнее имя того файла, в который
>> через уже открытый fd ещё пишет какой-нить nginx.
>
> Собственно говоря, эта фича называется delaycompress.

Что-то я не понимаю как это должно работать. По шагам:
[root at prometheus ~]# ls -la /var/log/nginx/access.log*
-rw-r--r-- 1 prometheusapp _nginx         0 ноя 22 00:38
/var/log/nginx/access.log
-rw-r--r-- 1 prometheusapp _nginx 808817073 фев 12 17:29
/var/log/nginx/access.log.1
-rw-r--r-- 1 prometheusapp _nginx   2762937 ноя 21 01:11
/var/log/nginx/access.log.2.bz2
-rw-r--r-- 1 prometheusapp _nginx   6315243 ноя 16 19:37
/var/log/nginx/access.log.3.bz2
-rw-r--r-- 1 prometheusapp _nginx  12019308 ноя  6 19:19
/var/log/nginx/access.log.4.bz2
[root at prometheus ~]#

Есть новый access.log который сейчас пустой. Есть старый access.log.1.
И есть более старый access.log.2 который от 21 ноября уже прошлого
года.

Есть:
[root at prometheus ~]# cat /etc/cron.daily/logrotate
#!/bin/sh
exec /usr/sbin/logrotate /etc/logrotate.conf
[root at prometheus ~]# service crond status
crond is running
[root at prometheus ~]#

Т.е. есть /etc/cron.daily/logrotate и запущенный сервис crond.

[root at prometheus ~]# cat /etc/logrotate.d/nginx
/var/log/nginx/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    create 0644 root _nginx
    postrotate
        /sbin/service nginx rotate >/dev/null
    endscript
}
[root at prometheus ~]#

Хорошо, тут есть delaycompress. И вызов service nginx rotate. В
/etc/init.d/nginx:
        rotate)
                msg_reloading nginx
                stop_daemon --pidfile "$PIDFILE" --expect-user root
-USR1 -- nginx

Согласно документации, USR1 должен заставить сделать "Reopen the log files".

[root at prometheus ~]# cat /var/log/syslog/messages | grep cron.daily
Feb 11 00:38:01 prometheus crond[32444]: (root) CMD (run-parts /etc/cron.daily)
Feb 12 00:38:01 prometheus crond[28609]: (root) CMD (run-parts /etc/cron.daily)
[root at prometheus ~]#

Согласно логам crond, он запустил /etc/cron.daily.

[root at prometheus ~]# /etc/init.d/nginx rotate
Reloading nginx service: [ DONE ]
[root at prometheus ~]#

И ничего не происходит. Делаем в упор:

[root at prometheus ~]# kill -s USR1 `cat /var/run/nginx.pid`
[root at prometheus ~]#

Тоже не работает. На лицо баг в nginx. Повесил в upsteam:
http://trac.nginx.org/nginx/ticket/297

-- 
Igor Zubkov
http://hi.im/ice


Подробная информация о списке рассылки Devel