Virtualbox nginx 服务不会在启动时启动,但可以通过终端激活

Virtualbox nginx 服务不会在启动时启动,但可以通过终端激活

我常用的操作系统是 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产生预期结果。

相关内容