ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

глобальные директивы error_lo g и pid


  • To: nginx-ru@xxxxxxxxx
  • Subject: глобальные директивы error_lo g и pid
  • From: Gena Makhomed <gmm@xxxxxxxxx>
  • Date: Sat, 13 Nov 2010 17:51:42 +0200
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=csdoc.com; s=dkim; t=1289663503; bh=OH1EVrFWdEndVOThlb5QNrrxvC+cKi9vBKu/Rs6MXfE=; h=Message-ID:Date:From:MIME-Version:To:Subject:Content-Type: Content-Transfer-Encoding; b=f5JHEfu7nETtwSK6nUzde/ez2QFCcnuko6q6fsmLgBv8TOPtSl+eMvbA7/5L9TkHh ll600bq4/3tFEoKyxRLD2KqOzRYbGLUPo4ZpFcJ6YYBeKG0uCQ4QnzSXXcrj2CeTBT n28ZgD3DSS2te95c/Y+52lqzpDKtdB3Mw0cMdFW0=


 *** ответ на сообщение из англоязычного списка рассылки

On 13.11.2010 16:51, Maxim Dounin wrote in nginx@xxxxxxxxx list:

>> Ideally I would like Nginx to always write to the error log file as
>> specified in the config, and never to the default error log file,
>> but it seems that the codebase does not allow this
>> and assumes logging facilities to be available
>> even before the config file is loaded.

> Writing early errors to error_log as specified in config is not
> possible as we haven't (yet) parsed the config.

это можно так сделать, чтобы писать early errors
только в тот error_log, который указан в конфиге.

> It would be good to have something like '-e' switch instead,
> similar to '-p' for prefix (actually, I even have it in my TODO
> since 0.7.53, but ENOTIME).

примерно так сейчас Apache и делает:

# httpd -h 2>&1 | grep error
  -e level           : show startup errors of level (see LogLevel)
  -E file            : log startup errors to file

но это не очень красивое решение, потому что инофрмация тут дублируется,
да и с pid-файлом будут аналогичные проблемы, тогда еще один ключ надо?

я придумал более красивое решение:

1. nginx определяет имя конфигурационного файла из параметра -с
   или используется built-in значение, если ключ -c не определен.

2. вызывается helper-функция, которая парсит конфигурационный файл,
   считывая только несколько глобальных директив: error_log и pid,
   если эти две директивы встретились в конфиге, парсинг прекращается.
   директива include также игнорируется, как и возможные ошибки разбора.

3. устанавливаются значения для error_log и pid,
   если их нет в конфиге - тогда используются built-in значения.

4. дальше обработка конфиг-файла продолжается как и раньше.

5. добавляется всего один параметр командной строки -G

  -G directive  : get global directive from configuration file

это необходимо для того, чтобы можно было seamless использовать
один бинарник nginx для запуска нескольких независимых instances:

pidfile=`nginx -G pid`

и дальше init-script знает, какой pid file отвечает этому экземпляру.
причем, вся конфигурация nginx находится только в одном месте - конфиге.

если в init-скрипте явно не указывать pid мастер-процесса,
то в Linux функция killproc будет искать процесс по имени
бинарника и будет посылать сигнал всем экземплярам nginx,
до которых только сможет дотянуться - я по этим граблям
уже прошелся. других вариантов кроме явного указания
"killproc -p $pidfile $instance" - просто нет.

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

аналогично, практически ENOTIME, чтобы в спокойной
обстановке заняться программированием этой feature.

но раз уж эта тема обсуждается в списках рассылки,
- вот мой вариант решения проблемы с error_log и pid.

--
Best regards,
 Gena



_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.