我常用的操作系统是 Windows 7 64 位,但我运行的是 VirtualBox,其中安装了最新版本的 Ubuntu。我试图将 VM 用作我的 Web 服务器,因为在 Windows 机器上开发 Rails 应用程序非常麻烦。我已经将它调整到所有服务正常运行的程度,并且我可以正常浏览/更新。
我已经安装了 nginx,我可以通过终端正常启动/停止服务。但是,我已将 nginx 启动脚本(如下)添加到 init.d 目录,并通过 将其添加到启动中sudo update-rc.d nginx defaults
,但它在启动时根本无法运行。根本无法运行。nginx 文件是可执行文件,所有者是 root(与正在运行的 mysql 服务相同...)
#! /bin/sh
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the nginx web server
# Description: starts nginx using start-stop-daemon
### END INIT INFO
PATH=/etc/nginx/sbin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/etc/nginx/sbin/nginx
NAME=nginx
DESC=nginx
test -x $DAEMON || exit 0
# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
. /etc/default/nginx
fi
set -e
case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --pidfile /etc/nginx/logs/$NAME.pid \
--exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --pidfile /etc/nginx/logs/$NAME.pid \
--exec $DAEMON
echo "$NAME."
;;
restart|force-reload)
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --pidfile \
/etc/nginx/logs/$NAME.pid --exec $DAEMON
sleep 1
start-stop-daemon --start --quiet --pidfile \
/etc/nginx/logs/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
reload)
echo -n "Reloading $DESC configuration: "
start-stop-daemon --stop --signal HUP --quiet --pidfile /etc/nginx/logs/$NAME.pid \
--exec $DAEMON
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
exit 1
;;
esac
exit 0
仅供参考,我知道 nginx 的正常安装目录是 /opt/nginx/sbin,但在我的系统上它实际上是 /etc/nginx/sbin。所以这不是问题所在。
sudo pgrep nginx
启动到桌面后立即运行没有任何结果,但我可以使用启动服务sudo /etc/init.d/nginx start
,并且它运行正常。在随后调用时sudo pgrep nginx
,我获得了 nginx 进程的 PID。
这为什么不起作用?
答案1
由于我遇到的另一个问题是 NFS 共享在启动时无法自动挂载,我认为 NGINX 可能是:
A) 实际上并未在启动时启动
或
B) 已启动但无法加载站点,因为它引用了 NFS 挂载上的文件
NFS 挂载可能在启动过程中过早通过 fstab 加载(在加载网络功能之前)并失败,从而导致 nginx 失败。修复问题概述这里提示我添加sudo service nginx start
到 rc.local 后sudo mount -a
产生预期结果。