ПРОЕКТЫ 


  АРХИВ 


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]

Re: [bugreport] nginx -t возвращает 0 код завершения при налич ии ошибок в конфиге



On 06.08.2010 9:29, Igor Sysoev wrote:

случайно сделал несколько ошибок в конфиге,
но nginx -t вернул 0 код завершения:

# nginx -t ; echo $?
[warn]: conflicting server name "example.com" on ip:80, ignored
[warn]: conflicting server name "*.example.com" on ip:80, ignored
the configuration file /etc/nginx/conf/nginx.conf syntax is ok
configuration file /etc/nginx/conf/nginx.conf test is successful
0

Это не фатальные ошибки и с ними nginx может запуститься и работать.

может. только вот он игнорирует тот server { ... } который будет вторым.
для конфигов с ошибками лучше бы nginx -t выдавал сообщение про ошибку и
возвращал ненулевой код возврата, чем 0 и "syntax is ok". нет разве?

У меня есть рабочая конфигурация, в которой выдаётся такое предупреждение.
Выглядит примерно так:

    server {
         listen       192.168.1.1:80;
         listen       8005;
         server_name  aaa.rambler.ru  192.168.1.1  "";

    server {
         listen       192.168.1.2:80;
         listen       8005;
         server_name  bbb.rambler.ru  192.168.1.2  "";

Выдаётся "[warn]: conflicting server name "" on 0.0.0.0:8005, ignored"

понятно.

можно ли сделать дополнительный параметр командной строки -q
чтобы nginx не выводил в стандартный поток ошибок сообщения

the configuration file /etc/nginx/conf/nginx.conf syntax is ok
configuration file /etc/nginx/conf/nginx.conf test is successful

которые собственно не являются сообщениями об ошибках/предупреждениями?

патч в аттаче.

P.S. этот патч необходим для того, чтобы в Linux`е можно было сделать
защиту операций restart / online_upgrade / reload от ошибок в конфиге
и не выводить ничего лишнего на консоль, если ошибок и предупреждений нет, но выводить сообщения про ошибки и предупреждения, если они есть.

примерно таким образом:

restart() {
    $binary -q -t -c $config || return 6
    stop
    start
}

--
Best regards,
 Gena
--- src/core/nginx.c.orig       2010-08-22 20:23:37.000000000 +0300
+++ src/core/nginx.c    2010-08-22 20:54:22.000000000 +0300
@@ -220,6 +220,7 @@
                 "  -V            : show version and configure options then 
exit"
                                    CRLF
                 "  -t            : test configuration and exit" CRLF
+                "  -q            : suppress non-error messages" CRLF
                 "  -s signal     : send signal to a master process: "
                                    "stop, quit, reopen, reload" CRLF
 #ifdef NGX_PREFIX
@@ -332,8 +333,10 @@
     }
 
     if (ngx_test_config) {
-        ngx_log_stderr(0, "configuration file %s test is successful",
-                       cycle->conf_file.data);
+        if (!ngx_quiet_mode) {
+            ngx_log_stderr(0, "configuration file %s test is successful",
+                           cycle->conf_file.data);
+        }
         return 0;
     }
 
@@ -685,6 +688,10 @@
                 ngx_test_config = 1;
                 break;
 
+            case 'q':
+                ngx_quiet_mode = 1;
+                break;
+
             case 'p':
                 if (*p) {
                     ngx_prefix = p;
--- src/core/ngx_cycle.c.orig   2010-08-22 20:30:35.000000000 +0300
+++ src/core/ngx_cycle.c        2010-08-22 20:47:24.000000000 +0300
@@ -23,6 +23,7 @@
 static ngx_pool_t     *ngx_temp_pool;
 static ngx_event_t     ngx_cleaner_event;
 
+ngx_uint_t             ngx_quiet_mode;
 ngx_uint_t             ngx_test_config;
 
 #if (NGX_THREADS)
@@ -267,8 +268,10 @@
     }
 
     if (ngx_test_config) {
-        ngx_log_stderr(0, "the configuration file %s syntax is ok",
-                       cycle->conf_file.data);
+        if (!ngx_quiet_mode) {
+            ngx_log_stderr(0, "the configuration file %s syntax is ok",
+                           cycle->conf_file.data);
+        }
     }
 
     for (i = 0; ngx_modules[i]; i++) {
--- src/core/ngx_cycle.h.orig   2010-08-22 20:21:02.000000000 +0300
+++ src/core/ngx_cycle.h        2010-08-22 20:47:51.000000000 +0300
@@ -129,6 +129,7 @@
 extern volatile ngx_cycle_t  *ngx_cycle;
 extern ngx_array_t            ngx_old_cycles;
 extern ngx_module_t           ngx_core_module;
+extern ngx_uint_t             ngx_quiet_mode;
 extern ngx_uint_t             ngx_test_config;
 #if (NGX_THREADS)
 extern ngx_tls_key_t          ngx_core_tls_key;
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.