Когда я перезапускаю службу nginx в командной строке на сервере Ubuntu, служба вылетает из-за ошибок в файле конфигурации nginx. На многосайтовом сервере это отключает все сайты, даже те, которые не содержат ошибок конфигурации.
Чтобы предотвратить это, я сначала запускаю тест конфигурации nginx:
nginx -t
После успешного прохождения теста я мог перезапустить службу:
/etc/init.d/nginx restart
Или только перезагрузите конфиги сайта nignx без перезагрузки:
nginx -s reload
Есть ли способ объединить эти две команды, если команда перезапуска зависит от результата теста конфигурации?
Я не смог найти это в Интернете, и официальная документация по этому поводу довольно проста. Я не так хорошо разбираюсь в Linux, поэтому не знаю, есть ли то, что я ищу, прямо передо мной или вообще невозможно.
Я использую nginx v1.1.19.
источник
Ответы:
На самом деле, насколько я знаю, nginx будет показывать пустое сообщение и не перезапускается, если конфигурация плохая.
Единственный способ облажаться - это остановить nginx, а затем начать заново. Остановить удалось бы, но не начать.
источник
service nginx reload
ничего не показывает, правильно ли была загружена конфигурация, поэтому бесполезно, если вы подозреваете, что конфигурация может быть неправильной.service nginx restart
остановит сервер, если в конфиге есть ошибка!Начиная с nginx 1.8.0, правильным решением является
Обратите внимание, что из-за ошибки
configtest
всегда возвращается нулевой код выхода, даже если в файле конфигурации есть ошибка.источник
nginx -t
без sudo почти наверняка выйдет из строя из-за ошибок разрешения.Я использую следующую команду для перезагрузки Nginx (версия 1.5.9), только если тест конфигурации прошел успешно:
Если вам нужно делать это часто, вы можете использовать псевдоним. Я использую следующее:
Уловка здесь выполняется с помощью «&&», который выполняет вторую команду только в том случае, если первая была успешной. Вы можете увидеть здесь более подробное объяснение использования оператора «&&».
Вы можете использовать «перезапуск» вместо «перезагрузки», если действительно хотите перезапустить сервер.
источник
pkill -1 nginx
(фактически то, что делает моя перезагрузка init.d / nginx) НЕ перезагружается, если конфигурация терпит неудачу и ошибочно возвращает успех. Проверьте свои версии.nginx -t
Вместо этого используйте .а затем используйте команды "nginx.reload" и т. д.
источник
Вы можете перезагрузить, используя
/etc/init.d/nginx reload
иsudo service nginx reload
Если
nginx -t
выдает ошибку, он не перезагружаетсяпоэтому используйте && для одновременного запуска обоих
лайк
источник
run both at a same time
выполняет команду справа, ЕСЛИ команда слева возвращает код выхода 0. Если выnginx -t
выдаете ошибку, код выхода не будет равен 0, поэтому вторая команда не будет запущена. Вnginx -s reload
любом случаеIf nginx -t throws some error then it won't reload
. Заявлениеrun both at a same time
также можно интерпретировать как одну команду или одну строку. Я не интерпретирую его слова в данном случаеin parallel
.Вы можете использовать сигналы для управления nginx.
Согласно документации, вам необходимо отправить сигнал HUP в главный процесс nginx.
Смотрите документацию здесь: http://nginx.org/en/docs/control.html
Вы можете отправить сигнал HUP на PID главного процесса nginx следующим образом:
Приведенная выше команда считывает PID nginx из
/var/run/nginx.pid
. По умолчанию в nginx записывается pid,/usr/local/nginx/logs/nginx.pid
но его можно переопределить в config. Проверьте свой,nginx.config
чтобы увидеть, где он сохраняет PID.источник
По крайней мере, в Debian сценарий запуска nginx имеет функцию перезагрузки, которая:
Похоже, все, что вам нужно сделать, это позвонить,
service nginx reload
а неrestart
так как он звонитtest_nginx_config
.источник
service nginx reload
не будет давать никаких указаний на то, была ли конфигурация проверена нормально или нет, и была ли она перезагружена или нет.test_nginx_config
тогда делать в таком случае?service nginx reload
достаточно в командной строке, однако иногда вам может потребоваться захватить вывод stderr и вернуть его обратно в сценарий для устранения неполадок.nginx -t
сообщит вам, в каком файле указан недопустимый параметр и в какой строке.