在 Ubuntu 15.04 和 15.10 上,nginx 无法通过 systemd 启动

在 Ubuntu 15.04 和 15.10 上,nginx 无法通过 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 正在尝试查找我作为反向代理的主机名。

答案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 是一个主动等待网络“up”的目标,其中“up”的定义由网络管理软件定义。

所以我改变了使用后的样子

After=network-online.target

现在 nginx 在启动时启动正常。我并不是说这是完全正确的解决方案,因为可能应该使用不同的 After 目标,这样在某些方面会更正确,但这似乎在最后几次重启中有效。

相关内容