Назад | Перейти на главную страницу

nginx не запускается при загрузке с systemd в Ubuntu 15.04 и 15.10

nginx не запускается при загрузке, но запускается нормально вручную. В журналах написано что-то вроде

nginx: [emerg] host not found in upstream "{some hostname}" in /etc/nginx/conf.d/some_site.conf
nginx: configuration file /etc/nginx/nginx.conf test failed

Failed to start A high performance web server and a reverse proxy server.
nginx.service: Unit entered failed state.
nginx.service: Failed with result 'exit-code'.

Кажется, что при загрузке DNS еще не готов, и nginx пытается найти имя хоста, которое у меня есть в качестве обратного прокси.

После некоторых исследований выяснилось, что systemd использует файл ниже для запуска nginx.

/lib/systemd/system/nginx.service

Файл на Ubuntu 15.04, Ubuntu 15.10 и даже на самом сайте nginx говорят, что нужно использовать строку After, как показано ниже.

After=network.target

Это заставляет человека думать, что сеть должна быть готова к работе. Однако я нашел ссылку http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/ это говорит

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

В ссылке говорится

network-online.target - это цель, которая активно ожидает, пока новая страница не будет "запущена", где определение "вверх" определяется программой управления сетью.

Поэтому я изменил значение After use, которое

After=network-online.target

Теперь nginx нормально запускается при загрузке. Я не утверждаю, что это полностью правильное решение, поскольку возможно, что следует использовать другую цель After, которая была бы более правильной каким-либо другим способом, но, похоже, это работает для последней пары перезагрузок.