LINUX.ORG.RU

logrotate nginx: пишет в тот же самый файл

 ,


0

1

Имеется такой конфиг logrotate:

/var/log/nginx/*.log {
        daily
        missingok
        rotate 10
        compress
        delaycompress
        notifempty
        create 640 nginx adm
        sharedscripts
        postrotate
                if [ -f /var/run/nginx.pid ]; then
                        kill -USR1 `cat /var/run/nginx.pid`
                fi
        endscript
}

Всё работает замечательно, но лог продолжает писаться в старый файл (тот, что был переименован). Например, в access.log.1, а не вновь созданный access.log. Выполняю вручную:

kill -USR1 `cat /var/run/nginx.pid`

…ошибок нет, эффекта тоже нет. Такое чувство, что kill не работает:

[root@nginx nginx]# kill -USR1 `cat /var/run/nginx.pid`
[root@nginx nginx]# ps aux | grep nginx
root      5364  0.0  0.0  75152  3712 ?        Ss   13:57   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
bitrix    5365  0.0  0.1  77084  6964 ?        S    13:57   0:00 nginx: worker process
bitrix    5366  0.0  0.2  77084  8688 ?        S    13:57   0:00 nginx: worker process
bitrix    5367  0.0  0.1  77084  6964 ?        S    13:57   0:00 nginx: worker process
bitrix    5368  0.0  0.1  77084  6964 ?        S    13:57   0:00 nginx: worker process
bitrix    5369  0.0  0.2  77084  8772 ?        S    13:57   0:00 nginx: worker process
bitrix    5370  0.0  0.1  77084  6964 ?        S    13:57   0:00 nginx: worker process
bitrix    5371  0.0  0.1  77084  6964 ?        S    13:57   0:00 nginx: worker process
bitrix    5372  0.0  0.1  77084  6964 ?        S    13:57   0:00 nginx: worker process
root      5527  0.0  0.0  10692   980 pts/1    S+   14:07   0:00 grep --color=auto nginx

Может ли это как-то быть связано с тем, что nginx работает в докер-контейнере? Как тогда правильно прибить процесс?

kill -USR1 `cat /var/run/nginx.pid`

Распиши подробно, что делает эта команда. Если не знаешь или знаешь какие-то общие слова, но при том всё равно задаёшь этот вопрос, то забанься и делай rm -Rf /* т.к. линукс не для тебя.

firkax ★★★★★
()

Может ли это как-то быть связано с тем, что nginx работает в докер-контейнере?

Может и связано, а может и нет. Никто не знает, что там в /var/run/nginx.pid, приходится вот гадать.

melkor217 ★★★★★
()
Ответ на: комментарий от Novascriptum

Ещё раз - распиши подробно, что делает конкретно эта команда. Не для чего её вызывают, а что она делает. Например:

echo "123" > /dev/null

Означает «открыть файл /dev/null для записи и вывести туда строку 123».

firkax ★★★★★
()

Может ли это как-то быть связано с тем, что nginx работает в докер-контейнере?

Да, может. Для определённого ответа в заглавном посту не хватает информации.

Как тогда правильно прибить процесс?

Этот вопрос тоже некорректный. Тебе же не завершить Nginx нужно, а попросить его файлы открыть заново. Это можно сделать, выполнив nginx -s reopen внутри контейнера через docker exec.

i-rinat ★★★★★
()

Смотри в конфиг nginx какой там pid прописан - возможно, что указан не /var/run/nginx.pid .

vtVitus ★★★★★
()
Ответ на: комментарий от vtVitus

Да, спасибо, но там, вроде, всё ок:

[root@nginx ~]# cat /etc/nginx/nginx.conf | grep pid
pid        /var/run/nginx.pid;

[root@nginx ~]# cat /var/run/nginx.pid
5364

[root@nginx ~]# ps aux | grep nginx | grep master
root      5364  0.0  0.0  75152  3712 ?        Ss   Feb22   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
Novascriptum
() автор топика
Ответ на: комментарий от firkax

Обожмой. Ну ок. kill -USR1 cat /var/run/nginx.pid означает:

прочитать файл /var/run/nginx.pid и вернуть его содержимое в команду kill, которой также переданы аргументы -USR1, сочетание которых для процесса nginx означает «переоткрыть log-файлы».

Novascriptum
() автор топика
Ответ на: комментарий от i-rinat

Тоже не помогло.:( Всё равно пишется в старый лог access.log.1, а не в новый - access.log. Прямо напасть какая-то.

Novascriptum
() автор топика
Ответ на: комментарий от Novascriptum

Не совсем верно ну да ладно, ты выше уже проверил это файл.

Можно попробовать разослать USR1 не только мастер-процессу но и воркерам. Или можно попробовать послать мастер-процессу HUP.

kill -HUP 5364

firkax ★★★★★
()
Ответ на: комментарий от firkax

Спасибо, проверю завтра. Сегодня выполнил systemctl reload nginx - оно тоже привело к тому, что лог стал писаться в новый файл.

Novascriptum
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.