在 Ubuntu 15.04 和 15.10 上使用 systemd 启动时 nginx 无法启动

Pau*_*ul 5 ubuntu nginx systemd ubuntu-15.10 ubuntu-15.04

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'.
Run Code Online (Sandbox Code Playgroud)

似乎在启动时 dns 还没有准备好,nginx 正在尝试查找我作为反向代理使用的主机名。

Pau*_*ul 9

经过一番研究,发现 systemd 使用下面的文件来启动 nginx

/lib/systemd/system/nginx.service
Run Code Online (Sandbox Code Playgroud)

Ubuntu 15.04、Ubuntu 15.10 甚至 nginx 站点上的文件都说要使用如下所示的 After 行

After=network.target
Run Code Online (Sandbox Code Playgroud)

这使人认为网络应该启动并准备就绪。但是,我发现链接http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/

network.target 在启动时没有什么意义。它仅表示网络管理堆栈在到达后已启动。

链接继续说

network-online.target 是一个主动等待网络“up”的目标,其中“up”的定义由网管软件定义。

所以我改变了 After use that 而不是

After=network-online.target
Run Code Online (Sandbox Code Playgroud)

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