2016年3月28日更新
我已经将下面我提出的对Ubuntu Upstart脚本的小改进作为一个pull request提交给了NGinX wiki。 我的pull request已经被接受,补丁已经合并。
我使用的是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启动脚本是在网络接口启动之前运行的。这个Server Fault答案给了我修复NginX Ubuntu Upstart脚本所需的提示。总结一下,缺少了一个'!',IFACE=lo
需要改为IFACE!=lo
。为了方便起见,我在下面粘贴了完整的脚本:
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
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
我会通知脚本作者我所发现的问题。
update-rc.d nginx defaults
对我没有任何作用,告诉我 init.d 已经存在。 - shukshin.ivan