Nginx logrotate logs

Я использую Ubuntu 15.04 и у меня установлена ​​стандартная установка nginx (apt-get install nginx).

Все работает нормально, но я замечаю, что журналы nginx вращаются, но nginx продолжает вывод в тот же файл журнала, например. /var/log/nginx/error.log пусто, но /var/log/nginx/error.log.1 записывает материал.

Конечно, если я перезапущу nginx, обычный файл журнала начнет записываться. Есть ли где-то ошибка в скрипте logrotate? Нужно ли перезапускать nginx при повороте?

6
задан 28 May 2015 в 17:26

3 ответа

Вы выполняете версию 15 Ubuntu.

Да, Вы могли слоняться без дела с logrotate и с отрывками сценария как в других ответах. Но Вы выполняете версию 15 Ubuntu. На Ваших службах операционной системы выполняются под systemd, который значением по умолчанию фиксирует их стандартную ошибку и выводы системного журнала и обрабатывает вход. Нет никакой потребности в nginx для записи в это error.log файл во-первых. Нет никакой потребности в logrotate вообще.

Другие ответы и комментарии под ними могут заставить Вас смотреть на /etc/init.d/nginx возможно. Не делать. Тот файл не важен. Вы выполняете версию 15 Ubuntu. Соответствующий файл, как предусмотрено прямо из поля в Ubuntu nginx-общий пакет, /lib/systemd/system/nginx.service который является тем, что systemd будет использовать, полностью игнорируя старое /etc/init.d/nginx файл, который полностью переопределяется надлежащим systemd сервисным файлом единицы.

Другие ответы могли бы привести Вас смотреть на /etc/logrotate.d/nginx также. Вы могли бы быть мистифицированы противоречием между тем, что можно ясно видеть там, пытаясь выполнить старую Систему 5 rc сценарий с нестандартным invoke-rc.d подкоманда и заявление, что существует нет postrotate строка файла конфигурации. Но снова, просто не делайте. Не фокусируйтесь на этих строках файла конфигурации управления logrotate во-первых. Вы выполняете версию 15 Ubuntu с пакетом, который уже имеет системную единицу и не использует Систему 5 rc сценарии в Вашей операционной системе и менеджер по сервису, который регистрирует эксплуатационную мощность.

Два шага к выполнению вещей systemd путь:

Настройте nginx более соответственно.

Ваш nginx сервису нужно сказать просто записать его журнал в его стандартную погрешность. В качестве награды можно отправить журнал доступа в журнал с помощью системного журнала, который также прерывает systemd.

Это сделано с nginx глобальными конфигурационными директивами и http директивами модуля. Конкретно:

  • error_log stderr ;
  • access_log syslog:server=unix:/dev/log ;

Вы любой изменяете Ваш nginx.conf файл для высказывания их как этого человека сделал или делает то, что Alexander Kuznecov сделал здесь и изменяет Ваш nginx.service файл единицы для передачи (глобальных) директив по nginx командная строка:

Type=forking
PIDFile=/run/nginx.pid
ExecStart=/usr/bin/nginx -g 'daemon on; error_log stderr; master_process on;'

Забудьте о logrotate полностью.

systemd помещает стандартный вывод и стандартную погрешность всех сервисов в ее журнал. Это обрабатывает вращение файлов журнала само. Нет никаких сигналов и никакой nginx сервисной перезагрузки, включенной вообще. Можно считать последние несколько записей в журнале, которые связаны с сервисом с (выполненный как суперпользователь или как adm пользователь)

systemctl status nginx.service
Можно считать все в журнале от того сервиса начиная с последней начальной загрузки с
journalctl -u nginx.service -b
5
ответ дан 28 May 2015 в 17:26

Причина nginx пишет в повернутый файл, отсутствие postrotate раздел в logrotate файл для nginx перезагружать конфигурацию nginx.

logrotate переименовал файл хорошо, но переименование не делает завершений или изменяет дескриптор файла (ядро внутренне поддерживает таблицу дескрипторов, которая демонстрирует все открытые файлы дескрипторами файлов или дескрипторами), дескриптор файла остается тем же, как это было ранее. Так nginx процесс продолжит выводить к тому же дескриптору файла (повернутый), а не недавно созданный файл.

Для решения этой проблемы добавьте a postrotate раздел в logrotate конфигурационный файл для перезагрузки конфигурационного файла nginx.

Например, вот postrotate раздел /etc/logrotate.d/apache2:

    postrotate
            if /etc/init.d/apache2 status > /dev/null ; then \
                /etc/init.d/apache2 reload > /dev/null; \
            fi;
    endscript
1
ответ дан 28 May 2015 в 17:26

Создайте файл /etc/logrotate.d/nginx со следующим содержимым. По крайней мере, работает на debian. Ваш пробег может отличаться

/var/log/nginx/*.log {
    daily
    missingok
    rotate 99
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
    endscript
}
1
ответ дан 15 February 2020 в 10:28

Другие вопросы по тегам:

Похожие вопросы: