Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bugreport] nginx -t возвращает 0 ко д завершения при наличии ошибок в конфиге
- To: nginx-ru@xxxxxxxxx
- Subject: [bugreport] nginx -t возвращает 0 ко д завершения при наличии ошибок в конфиге
- From: Gena Makhomed <gmm@xxxxxxxxx>
- Date: Fri, 06 Aug 2010 01:46:01 +0300
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=csdoc.com; s=dkim; t=1281048361; bh=VTSQnEq21coAs+4PBWQHEAvN9ci3WiTxGQUlHSnJ+hA=; h=Message-ID:Date:From:User-Agent:MIME-Version:To:Subject: Content-Type:Content-Transfer-Encoding; b=PTrlBQr7T3eAR/rU0vC1UQsm DXM466BSe2l73hC6HzZC2zybOE7Os9XObrC60F+MQnyiC16IEgovITcAnL3z4+FUs9B WpO+SEC7ZR0bgE1GofeqFlaeo+o2HHbS/1iDlgQmYF9kJOecGnOQtWBIqr6KSczzCws BSwGYPCZpzrhA=
Здравствуйте!
случайно сделал несколько ошибок в конфиге,
но 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@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru
|