在启动 Apache 之前自动挂载 NFS / Samba 共享的正确方法是什么?

在启动 Apache 之前自动挂载 NFS / Samba 共享的正确方法是什么?

我使用 Ubuntu 12.04 (服务器) VM 作为开发 Web 服务器。我将服务文件保存在 VM 主机上,因此 Apache 使用 NFS 挂载目录。为了DocumentRoot 保持自动化,我将 Apache 设置为在启动时启动。

  • 在启动时自动挂载 NFS 我没有遇到任何问题。
  • 我在启动时启动 Apache 没有任何问题。

问题:mountall开始新贵启动了 Apache。

经过一番折腾upstartinitctl我想到了一个可行的办法——但肯定不是理想——也不便携。

/etc/fstab

nfs_server:/    /mnt/nfs_server  nfs4   _netdev,noauto  0   0

/etc/init.d/apache2
以下内容插入在初始化信息部分:

if [ ! -s "/var/www/default/index.php" ]; then
    echo -n "  Mounting NFS and Samba shares...."
    mount nfs_server:/
    result=$?
    if [ 0 -ne $result ]; then
        echo "  ERROR. mount returned $result";
    else
        echo "    [ OK ]";
    fi
fi
...

否则,该脚本就是最初安装的脚本(在此处查看默认文件)。

笔记

  1. 我尝试过使用mountall而不是按名称安装 NFS 共享。
    • 这会导致其他错误消息(特别是swapon没有挂载我的交换分区)
    • (但是)最终启动时,一切似乎都很好。
  2. 该虚拟机将被压缩并提供给其他开发人员。有些可能使用 NFS 安装,有些可能使用 Samba。

答案1

解决这个问题的一种方法是修改 init 脚本调用它们的顺序,从而改变加载这些内容的顺序。可能还有其他(更简单的)方法可以做到这一点,但最直接的方法是 -

  1. 通过发出命令(以 root 身份)“runlevel”来查找服务器正在运行的运行级别。
  2. 转到 /etc/rcX.d,其中 X 是您所在的运行级别号。
  3. 您将在该目录中看到大量符号链接 - 它们通常采用 SxxNAME 格式,其中“S”表示开始,xx 是顺序 - 较早的脚本首先运行 - 名称是此链接到的脚本的名称,位于 etc/rc.d. 中。将 apache 脚本重命名为比 nfs 脚本更高的数字。

相关内容