Gena Makhomed
August 05, 2010 06:48PM
Здравствуйте!

случайно сделал несколько ошибок в конфиге,
но 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

ожидаемое поведение:

возвращать 0 код завершения только в случае отсутствия ошибок.

почему/зачем это так важно:

в init-скрипте для Fedora/CentOS я сделал две функции:

configtest() {
$binary -t -c $config -g "pid $pidfile;"
}

configtest_q() {
configtest >/dev/null 2>&1
}

и все потенциально опасные операции
( reload, online_upgrade, restart )
защитил таким образом:

restart() {
configtest_q || configtest || return 6
stop
start
}

reload() {
configtest_q || configtest || return 6
echo -n $"Reloading $instance: "
killproc -p $pidfile $instance -HUP
}

в результате при выполнении service nginx reload
нет возможности узнать что в конфиге nginx
есть какие-то ошибки:

# service nginx reload
Reloading nginx: [ OK ]
#

хотя они там есть:

# 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
#

в данном случае "conflicting server name" - это ведь ошибка, а не warn.

warn - это например, напоминание о том, что параметр default
в директиве listen уже deprecated и будет removed в новых версиях.

а "критическая ошибка" - то, что делает невозможным запуск nginx.

"conflicting server name" - это что-то между [warn] и [critical].

возможно имеет смысл добавить параметр -Werror для -t
чтобы все возможные предупреждения считать ошибками,
если ненулевой код возврата будет возвращаться только для ошибок.

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

если будет возврат 0 кода завершения в случае ошибок/предупреждений
то придется парсить вывод nginx -t на предмет того, есть ли там лишние
строки кроме двух последних, где прямо говорится о том, что проблем нет:

[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

P.S.

баг-трекера нет, емейл может потеряться, поэтому пишу в рассылку.

--
Best regards,
Gena


_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

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

Gena Makhomed August 05, 2010 06:48PM

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

Anton Yuzhaninov August 05, 2010 07:14PM

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

Gena Makhomed August 05, 2010 07:44PM

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

Maxim Dounin August 05, 2010 10:46PM

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

Gena Makhomed August 22, 2010 03:30PM

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

Igor Sysoev August 06, 2010 02:30AM

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

Gena Makhomed August 22, 2010 03:06PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 161
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready