一、系统初始化脚本
从INIT进程的配置文件中可以看出,INIT进程首先读取了系统默认运行级别,之后立即使用/etc/rc.d/rc.sysinit脚本对系统进行初始化。
- 系统初始化脚本rc.sysinit在INIT进程被载入之后运行,主要的功能如下:
- 获取网络环境并设置相关环境变量。
- 添加/proc、/sysfs文件系统,检测是否存在USB设备,如有则尝试挂载,并载入USB设备驱动程序。
- 获取SELinux的设置状态并决定是否需要启用SELinux。
- 从硬件时钟中读取并设置系统时钟,设置系统使用的字体、语言等。
- 设置并检测磁盘、文件系统,开启RAID和LVM支持,检测文件系统,以可读写方式重新挂载文件系统,挂载并启用本地文件系统及配额支持等。
- 将启动过程中的信息写入/var/log/dmesg文件。
除此之外,脚本还设置了鼠标、键盘及产生随机数设备等。系统初始化脚本最主要的功能是为软件和系统服务创造一个良好的运行环境,许多底层功能都是在此脚本中设置完成的。
二、rc.local脚本
系统启动的最后阶段,INIT进程将会执行/etc/rc.local脚本。这个脚本是通过服务的形式调用的,运行级别目录中的S99local就是该文件的链接。rc.local脚本的主要作用是让用户定制系统启动时需要运行的脚本和命令。
查看/etc/rc.local脚本如下:
[root@localhost ~]# cat /etc/rc.local #!/bin/sh # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the full Sys V style init stuff. touch /var/lock/subsys/local
在脚本的最后一行,使用touch命令创建了一个名为local的空文件,这样做的目的是为了方便查阅该脚本是否已经执行过。
通常将管理员需要在系统启动时使用的命令保存在这个文件中,这样系统在启动时就会执行这些命令了。例如手动编译MySQL之后,可以将以下行加入该脚本:
/usr/local/mysql/bin/mysqld_safe --user=mysql &>/dev/null &
这样每次系统重新启动,MySQL就会自动运行了。
使用rc.local脚本时,需要注意以下几点:
- 妥善处理命令或脚本的输出,否则可能会弄乱命令提示符的登录界面。
- 应该使用&将其放入后台执行,否则用户可能无法看到登录提示符。
- 如果要自动运行的是用户编译的程序或自己编写的脚本,建议使用绝对路径的方式表示。
技巧:如果系统启动之后发现系统中某个硬件没有正常工作,可以通过运行命令dmesg查看系统启动过程中的初始化错误信息。