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正在尝试查找我作为反向代理的主机名。

经过一番研究,事实certificatesystemd使用下面的文件来启动nginx

 /lib/systemd/system/nginx.service 

Ubuntu 15.04,Ubuntu 15.10,甚至nginx网站本身的文件都会使用下面的After行

 After=network.target 

这使得一个人认为networking应该已经准备好了。 但是,我find了链接http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/ ,说

network.target在启动过程中意义不大。 它只是表示networkingpipe理堆栈已经达到了。

链接继续说

network-online.target是一个活动等待直到nework处于“up”的目标,其中“up”的定义是由networkingpipe理软件定义的。

所以我改变了使用后,而不是像

 After=network-online.target 

现在nginx在启动时启动正常。 我没有声称这是完全正确的解决scheme,因为有可能应该使用不同的After目标,在其他方面更正确,但是这似乎适用于最后几次重新启动。