ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf

Gena Makhomed gmm на csdoc.com
Чт Ноя 9 14:57:53 UTC 2017


On 09.11.2017 15:56, Konstantin Pavlov wrote:

>> В чем смысл директивы
>>
>> ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
>>
>> в файле /usr/lib/systemd/system/nginx.service ?

В инит-скрипте CentOS 6 все сделано правильно, там конфиг тестируется
только перед тем как выполнить рестар сервера:

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

configtest_q() {
   $binary -t -q -c $config
}

и если тестирование конфигурации завершилось ошибкой -
работающий nginx не останавливаается.

В юнит-файле CentOS 7 эта строчка

ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf

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

Может быть имеет смысл вообще убрать строку

ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf

из юнит-файла? Хуже от этого ведь не станет, только лучше.

Или я ошибаюсь и в этой строчке есть какой-смысл? Какой?

>> У меня из-за этой фигни nginx не поднялся после того,
>> как сервер перезапустился. В логах вот такая запись:
>>
>> Nov 09 13:26:30 example.com nginx[851]: nginx: [warn] "ssl_stapling" ignored, host not found in OCSP responder "ocsp.int-x3.letsencrypt.org" in the certificate "/etc/letsencrypt/live/example.net/fullchain.pem"
>> Nov 09 13:26:51 example.com nginx[851]: nginx: [warn] "ssl_stapling" ignored, host not found in OCSP responder "ocsp.int-x3.letsencrypt.org" in the certificate "/etc/letsencrypt/live/example.net/fullchain.pem"
>> Nov 09 13:27:11 example.com nginx[851]: nginx: [warn] "ssl_stapling" ignored, host not found in OCSP responder "ocsp.int-x3.letsencrypt.org" in the certificate "/etc/letsencrypt/live/example.net/fullchain.pem"
>> Nov 09 13:27:31 example.com nginx[851]: nginx: [warn] "ssl_stapling" ignored, host not found in OCSP responder "ocsp.int-x3.letsencrypt.org" in the certificate "/etc/letsencrypt/live/example.net/fullchain.pem"
>> Nov 09 13:27:40 example.com systemd[1]: nginx.service start-pre operation timed out. Terminating.
>> Nov 09 13:27:40 example.com systemd[1]: Failed to start nginx - high performance web server.
>> Nov 09 13:27:40 example.com systemd[1]: Unit nginx.service entered failed state.
>> Nov 09 13:27:40 example.com systemd[1]: nginx.service failed.
>>
>> После того как вручную сделал systemctl restart nginx - все поднялось.
> 
> Строчка в 13:26:30 - первая после запуска сервиса?

Из лога видно, что перед каждой такой строчкой [warn] nginx "думает" 
примерно 20 секунд.

Таймаут получается ровно 90 секунд.

> Что выводит systemctl -a show nginx.service | grep -i timeout?

# systemctl -a show nginx.service | grep -i timeout
TimeoutStartUSec=1min 30s
TimeoutStopUSec=1min 30s
JobTimeoutUSec=0
JobTimeoutAction=none
JobTimeoutRebootArgument=

-- 
Best regards,
  Gena



Подробная информация о списке рассылки nginx-ru