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 пытается найти имя хоста, которое я использую в качестве обратного прокси.

1 ответ

Решение

После некоторых исследований выясняется, что 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 - это цель, которая активно ожидает, пока nework будет "вверх", где определение "вверх" определяется программным обеспечением для управления сетью.

Поэтому я изменил после использования, а не как

After=network-online.target

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

Другие вопросы по тегам