Я использую Ubuntu 15.04 и у меня установлена стандартная установка nginx
(apt-get install nginx
).
Все работает нормально, но я замечаю, что журналы nginx
вращаются, но nginx
продолжает вывод в тот же файл журнала, например. /var/log/nginx/error.log
пусто, но /var/log/nginx/error.log.1
записывает материал.
Конечно, если я перезапущу nginx
, обычный файл журнала начнет записываться. Есть ли где-то ошибка в скрипте logrotate
? Нужно ли перезапускать nginx
при повороте?
Да, Вы могли слоняться без дела с 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
сервису нужно сказать просто записать его журнал в его стандартную погрешность. В качестве награды можно отправить журнал доступа в журнал с помощью системного журнала, который также прерывает 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
Причина 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
Создайте файл /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
}