linux启动 <下>
init进程是Kernel初始化完成之后启动的第一个用户空间进程,PID为1,所有其它的进程都由此进程
fork()
得来;
init进化:upstart, systemd等并行加速启动;
I. 配置文件/etc/inittab
格式
id:runlevels:action:process
id,指定唯一标识;
runleves,指定该记录在哪些运行级别生效;
action,指定要采取的action;
process,指定要运行的程序;
RHEL6.x: upstart init
/etc/inittab
/etc/init/*.conf
II. inittab所配置的任务
- 设定默认运行级别
如果不设定,init会提示用户输入 - 运行系统初始化脚本
/etc/rc.d/rc.sysinit
2.1 **udev和selinux;
2.2 根据/etc/sysctl.conf
设定内核参数;
2.3 设定时钟时间;
2.4 装载键盘映射;
2.5 启用交换分区;
2.6 设置主机名;
2.7 根文件系统检测,并以读写方式重新挂载;
2.8 **RAID和LVM设备;
2.9 启用磁盘配额;
2.10 根据/etc/fstab,检查并挂载其它文件系统;
2.11 清理过期的锁和PID文件; - 调用
/etc/rc.d/rc N
, 运行/etc/rcN.d
目录下的脚本 - 设定
Ctrl+Alt+Del
组合键的操作 - 定义UPS相关操作
- 2345级别下创建虚拟终端
- 5级别下启动
xdm
图形终端
III. /etc/rc.d/rc
脚本
该脚本会到运行级别对应的目录中先遍历执行K开头的脚本,然后再遍历执行S开头的脚本;
这些脚本都链接到/etc/init.d/
目录下的服务脚本,而/etc/init.d
目录又链接到/etc/rc.d/init.d
, 关系如下图:由上可知,想在某个级别下开机启动某个服务,只需要在对应的目录下创建相应的链接即可; 手动创建的话可能比较麻烦,于是就有了自动添加链接的程序chkconfig。
chkconfig
可以自动根据服务脚本在/etc/rc#.d
目录下创建链接文件,但要求服务脚本含有以下两条指令:
2.1# chkconfig:runlevels SS KK
: 表示在runlevels对应的脚本目录下创建优先级为SS的链接,-表示不创建S开头的链接; 在其余的runlevels对应的脚本目录下创建优先级为KK的链接;
2.2# description
: 脚本功能的描述;chkconfig
常用选项--list [service]
:显示系统所有服务[指定服务]及其开启状态;--add service
: 添加服务到chkconfig列表中,创建相应的链接文件;--del service
: 从chkconfig列表删除服务,并删除相应的链接文件;--level [levels] service {off|on}
: 修改服务运行级别,如不指定levels,默认为2345;
特别鸣谢: www.magedu.com