Linux RedHat下添加自启动脚本的几种方式

来源:互联网 发布:sql入门经典 微盘 编辑:程序博客网 时间:2024/04/29 05:24

Linux RedHat下添加自启动脚本的几种方式

在配置自启动脚本之前我们需要知道Linux系统启动的过程

其中启动的前三步BIOS自检启动GRUB/LILO加载内核,与本文无关,略过……

一、执行init进程

init进程是系统所有进程的起点,内核在完成核内引导以后,即在本进程空间内加载init程序,它的进程号是1。Init进程是所有进程的发起者和控制者。因为在任何基于Linux的系统中,它都是第一个运行的进程,所以init进程的编号(PID)永远是1。

init进程有以下两个作用。

init进程的第一个作用是扮演终结父进程的角色。因为init进程永远不会被终止,所以系统总是可以确信它的存在,并在必要的时候以它为参照。如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况。此时那些失去了父进程的子进程就都会以init作为它们的父进程。

init的第二个作用是在进入某个特定的运行级别时运行相应的程序,以此对各种运行级别进行管理。它的这个作用是由/etc/inittab文件定义的。

二、通过/etc/inittab文件进行初始化

Init的工作是根据/etc/inittab来执行相应的脚本,进行系统初始化,如设置键盘、字体、装载模块,设置网络等。

1./etc/rc.d/rc.sysinit

在init的配置文件中有如下一行:
si::sysinit:/etc/rc.d/rc.sysinit

rc.sysinit是由init执行的第一个脚本,它主要完成一些系统初始化的工作。rc.sysinit是每一个运行级别都要首先运行的重要脚本,它主要完成的工作有:激活交换分区、检查磁盘、加载硬件模块以及其他一些需要优先执行的任务。/etc/rc.d/ rc.sysinit主要完成各个运行模式中相同的初始化工作。包括:

设置初始的$PATH变量;
配置网络;
为虚拟内存启动交换;
调协系统的主机名;
检查root文件系统,以进行必要的修复;
检查root文件系统的配额;
为root文件系统打开用户和组的配额;
以读/写的方式重新装载root文件系统;
清除被装载的文件系统表/etc/mtab;
把root文件系统输入到mtab;
使系统为装入模块做准备;
查找模块的相关文件;
检查文件系统,以进行必要的修复;
加载所有其他文件系统;
清除/etc/mtab、/etc/fastboot和/etc/nologin;
删除UUCP和lock文件;
删除过时的子系统文件;
删除过时的pid文件;
设置系统时钟;
激活交换分区;
初始化串行端口;
装入模块。

2./etc/rc.d/rcX.d/[KS]

在rc.sysinit执行后,将返回init,继续执行/etc/rc.d/rc程序。以默认运行级别5为例,(可以查看/etc/inittab文件确认默认的运行级别,相关字符段id:5:initdefault:),init将执行配置文件inittab中的以下内容:
15:5:wait:/etc/rc.d/rc 5

这一行表示以5为参数运行/etc/rc.d/rc,/etc/rc.d/rc是一个shell脚本,它接受5作为参数,去执行/etc/rc.d/rc5.d目录下的所有的rc启动脚本,/etc/rc.d/rc5.d目录中的启动脚本实际上都是一些链接文件,而不是真正的rc启动脚本,真正的rc启动脚本实际上都在/etc/rc.d/init.d目录下。而这些rc启动脚本有着类似的用法,它们一般能接受stat、stop、restart、status等参数。

/etc/rc.d/rc5.d中的rc启动脚本通常是以K或S开头的链接文件,以S开头的启动脚本将以start参数来运行。如果发现相应的脚本也存在K打头的链接,而且已经处于运行状态了(以/var/lock/subsys下的文件作为标志),则将首先以stop为参数停止这些已经启动了的守护进程,然后再重新运行。这样做是为了保证当init改变运行级别时,所有相关的守护进程都将重启。

三、执行/etc/ec.d/rc.local

RHEL 4中的运行模式2、3、5都把/etc/rc.d/rc.local做为初始化脚本中的最后一个,所以用户可以自己在这个文件中添加一些需要在其他初始化工作之后、登录之前执行的命令。在维护Linux系统时一般会遇到需要系统管理员对开机或关机命令脚本进行修改的情况。如果所做的修改只在引导开机的时候起作用,并且改动不大的话,可以考虑简单地编辑一下/etc/rc.d/rc.local脚本。这个命令脚本程序是在引导过程的最后一步被执行的。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

好了知道了Linux的启动过程,那么我们添加自启动脚本就方便了,无非是在/etc/ec.d/rc.local里直接添加,或写个脚本,把脚本的路径放到/etc/ec.d/rc.local中,其实这两种方式原理是一样的。还有就是写个脚本,把脚本放在/etc/ec.d/init.d文件夹下,然后 chkconfig --add  filename。下面具体说下;

先看下/etc 文件夹下与自启动相关的文件和目录 ,ls -l 可以看到如下:

lrwxrwxrwx  1 root root      11 08-16 08:41 init.d -> rc.d/init.dlrwxrwxrwx  1 root root      10 08-16 08:43 rc0.d -> rc.d/rc0.dlrwxrwxrwx  1 root root      10 08-16 08:43 rc1.d -> rc.d/rc1.dlrwxrwxrwx  1 root root      10 08-16 08:43 rc2.d -> rc.d/rc2.dlrwxrwxrwx  1 root root      10 08-16 08:43 rc3.d -> rc.d/rc3.dlrwxrwxrwx  1 root root      10 08-16 08:43 rc4.d -> rc.d/rc4.dlrwxrwxrwx  1 root root      10 08-16 08:43 rc5.d -> rc.d/rc5.dlrwxrwxrwx  1 root root      10 08-16 08:43 rc6.d -> rc.d/rc6.dlrwxrwxrwx  1 root root      13 08-16 08:43 rc.local -> rc.d/rc.local
其实/etc下的init.d目录和rc.load文件时rc.d目录下相关文件的软链接,我们在修改的时候修改其中一个就可以了。

1)编辑/etc/rc.d/rc.local文件
虽然分级启动会运行不同的rcX.d文件,但是这个文件在运行分级2、3、5的时候都会作为初始化的最后一个脚本执行。

[root@244 etc]# 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#这里可以添加你要执行的脚本

OK,测试成功。

2)写个脚本,示例如下

[root@244 ~]# vi addroute#! /bin/bashroute add -net  10.10.101.0  netmask 255.255.255.0 gw 10.10.100.1

添加运行权限 chmod +x addroute

再在/etc/rc.d/rc.local文件中添加

/root/addroute

OK,测试成功。

3)使用chkconfig命令把要启动的脚本添加到服务里
把addroute的开头改成

#!/bin/sh## chkconfig: 2345 20 80# description: Add route#route add -net  10.10.101.0  netmask 255.255.255.0 gw 10.10.100.1

保存退出。添加运行权限

这里的chkconfig: 2345 20 80和description: Add route 一定要有。

chkconfig后面的2345是指运行级别,等于是在rc2.d rc3.d rc4.d rc5.d 中建立指向/etc/init.d 目录下addroute脚本的软链接。

20和80 一个是系统启动时执行的顺序和系统关闭时结束命令的顺序

注意一定要把脚本放在/etc/init.d目录下才能使用chkconfig

执行:chkconfig --add addroute

重启。
测试成功!

 



 




原创粉丝点击