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

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

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

问题: 暴发户启动Apache 之后, mountall启动。

在与upstartinitctl放在一起后,我想出了一个可行的黑客 – 但肯定不是理想的 – 也不便携。

/etc/fstab

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

/etc/init.d/apache2
INIT INFO部分下方的顶部插入了以下内容:

 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。

解决这个问题的一种方法是通过修改init脚本调用它们的顺序来改变这些东西的加载顺序。 可能有其他(更简单)的方法来做到这一点,但裸机的方式是 –

  1. 通过发出命令(以root身份)“runlevel”来查找运行服务器的运行级别。
  2. 转到/etc/rcX.d其中X是您所在的运行级别号码。
  3. 你会在那个目录中看到大量的符号链接 – 它们通常是SxxNAMEforms,其中“S”表示开始,xx是顺序 – 较早的脚本先运行 – name是脚本的名字,链接到等/ rc.d中。 重命名apache脚本以获得更高的编号,然后是nfs脚本。