Ubuntu

nginx 無法在 Ubuntu 15.04 和 15.10 上使用 systemd 啟動

  • January 16, 2016

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 是一個主動等待直到網路“up”的目標,其中“up”的定義由網管軟體定義。

所以我改變了使用之後,而不是喜歡

After=network-online.target

現在 nginx 在啟動時啟動正常。我並不是說這是完全正確的解決方案,因為有可能應該使用不同的 After 目標,這在其他方面會更正確,但這似乎適用於最後幾次重新啟動。

引用自:https://serverfault.com/questions/749662