2016 年 3 月 28 日更新
我已经提交了对 Ubuntu Upstart 脚本的小改进,这是我在下面提出的,作为对 NGinX wiki 的拉取请求。我的拉取请求已被接受并且补丁已被合并。
我在 Ubuntu 14.04 LTS 上遇到了同样的问题;NginX 可以正常使用sudo service nginx restart
,但在服务器启动时没有自动启动。
我按照 NGinX Ubuntu Upstart Wiki 页面的说明进行操作,但它不起作用(最初)。所以我挖了一点。首先,我发现 Ubuntu 确实尝试在启动时启动 NGinX,但失败了:
$ sudo cat /var/log/boot.log
...
* Starting nginx http daemon [fail]
...
然后我找到了 initctl upstart 作业的日志文件:
$ cat /var/log/upstart/nginx.log
...
nginx: [emerg] host not found in upstream "<mydomain>:443" in /etc/nginx/sites-enabled/mydomain:2
...
所以,我发现 NGinX 启动脚本是在网络接口启动之前运行的。这个服务器故障答案给了我修复 NginX Ubuntu Upstart 脚本所需的提示。总之,一个“!” 不见了,IFACE=lo
需要改成IFACE!=lo
. 为方便起见,我在下面粘贴了完整的脚本:
# nginx
description "nginx http daemon"
author "George Shammas <georgyo@gmail.com>"
start on (filesystem and net-device-up IFACE!=lo)
stop on runlevel [!2345]
env DAEMON=/usr/sbin/nginx
env PID=/var/run/nginx.pid
expect fork
respawn
respawn limit 10 5
#oom never
pre-start script
$DAEMON -t
if [ $? -ne 0 ]
then exit $?
fi
end script
exec $DAEMON
重新启动后,我检查了 NGinX 现在是否正在运行:
$ sudo initctl list | grep nginx
nginx start/running, process 1551
我会通知这个脚本的作者我的发现。