Ubuntu
nginx 無法在 Ubuntu 15.04 和 15.10 上使用 systemd 啟動
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 目標,這在其他方面會更正確,但這似乎適用於最後幾次重新啟動。