zoukankan      html  css  js  c++  java
  • NFS 开机自动启动(转载 http://www.2cto.com/os/201204/127255.html )

    NFS开机自动启动及其原理
     
        NFS服务器端已经配置好了,但机器重启以后我们还要重新开启NFS服务。为了不这么麻烦,我们要让NFS和portmap服务在开机时自动启动,这样就会避免出现mount clntudp_create: RPC: Program not registered这样的错误了。
      让脚本在开机时自动运行需要对linux系统的启动过程有所了解。我们知道系统加载内核以后运行的第一个程序就是init,所以它的PID永远是1,你自己用top命令查看一下就知道了;而init程序首先就要读取/etc/inittab文件,init程序就根据这个文件的内容按照顺序创建进程。  www.2cto.com  
      我们打开这个文件,不去管以#开头的注释文字,共有7个部分:我们需要关注的是第一部分和第二部分。
        

     
        Init程序首先读取第一部分,确定shell的运行级别,这里的运行级别为3。Shell一共有7个运行级别,在/etc/inittab文件开头的注释部分对这7个运行级别做了详细解释,对shell运行不了解的话这可是要必看的。 
      然后init程序读取第二部分,运行脚本/etc/rc.d/rc.sysinit,这个脚本主要包含有系统的初始化命令。
      接着就要根据确定的shell运行级别来运行对应目录里的脚本,以启动相关服务。我的机器的运行级别是3,init就根据这个级别号运行/etc/rc.d/rc3.d目录里的脚本。
      其余几个部分都是关于组合键、UPS电源等方面的内容,感兴趣的话可以看一下。
      说到这里我们知道了,init程序根据运行级别号来启动/etc/rc.d目录中对应目录里的脚本,以启动相关服务。这里是运行/etc/rc.d/rc3.d目录里的脚本,如果运行级别为5,则运行/etc/rc.d/rc5.d目录里的脚本。
      我们来看一下/etc/rc.d目录里的文件。
        

     
       可以看到/etc/rc.d目录里一共有3个普通文件和8个目录文件。这8个目录中init.d目录是各种程序和脚本的存放目录,而rc0.d到rc6.d这7个目录里的文件都是init.d目录里程序文件的链接文件,只是被赋于了相应的运行级别。来看一下/etc/rc.d/rc3.d目录里的文件:   


     
       我们想要开机就启动的NFS服务和portmap服务分别在图片中第二列的第一行和最后一列的第三行,即K20nfs和S13portmap。  www.2cto.com  
      我们看到目录里所有文件都是以K或S开头,然后跟一个数字,然后才是文件名。这是什么意思?S即start,开启服务,K即kill,关闭服务。系统确定运行级别以后,进入相应的rcN.d目录,执行以S开头的文件以启用相关服务进程,而且是按照S后面的那个数字的顺序依次执行;而更换运行级别时,会先执行以K开头的脚本,再执行以S开头的脚本,执行顺序都是按照他们后面的数字的顺序;退出系统时,就依次执行以K开头的文件关闭相关服务。
      那我们知道了,在级别为3的这个运行级别上,nfs服务没有默认没有随开机而启动,而portmap服务则随开机而启动,是被系统第13个启用的服务;我们手动启动nfs服务以后,在关机的时候nfs服务是第20个被关闭的服务。
      这里有了一个疑问:这些服务的启用和关闭顺序是哪里限定的?答案是程序自身。我们可以打开portmap和nfs服务的脚本看一下,脚本路径为/etc/rc.d/init.d/ portmap (nfs)。输入命令:less  /etc/rc.d/init.d/ portmap (nfs)
        
        
     
       如截图所示,portmap服务在345三个级别上运行,启用顺序为第13,关闭顺序为第87;nfs服务不在任何运行级别上启用,启用顺序为第60,关闭顺序为第20。(服务不在任何运行级别上启用时,运行级别那个字段用-代替。)
       很明显,想要让NFS服务自动启用,就需要把相应级别对应的rcN.d目录里的nfs服务由K状态更改为S状态。由于运行级别为2时,系统不运行NFS,我们只需要在3、4、5三个级别上让NFS服务随开机启动。(级别4根本就没有启用,让NFS服务在级别4上启用不知道有什么用;只不过大家都这么说,我也就随大流。)  www.2cto.com  
      怎么更改?系统提供了一个用起来很方便的方法:使用chkconfig命令。Chkconfig主要用来查询和管理服务在不同运行级别上的启用情况,需要注意的是:chkconfig命令并没有更改程序脚本里的内容,只是更改了程序在rcN.d中的链接名称的开头字母,以此来确保其在相应运行级别上开启或关闭。
      输入chkconfig命令,直接敲回车,可以明确看到它主有4种作用:
     
        Chkconfig --list name  列出指定服务的运行级别情况
        Chkconfig--add name  增加一个服务
        Chkconfig --del name  删除一个服务
        Chkconfig   [--level <levels>]  <name>  <on|off|reset>  更改/重设指定服务的运行级别
      我们输入chkconfig --level 345 nfs on,即可使NFS服务在运行级别3、4、5上自动运行。 
       
     
     
     
    作者 zhl_shanghai
  • 相关阅读:

    (luogu)[模板]最长公共子序列
    表达式的值
    邮票面值设计
    尼克的任务
    HISTOGRA
    消防局的设立
    青蛙的约会
    产生数
    奇怪的电梯
  • 原文地址:https://www.cnblogs.com/kramer/p/3088844.html
Copyright © 2011-2022 走看看