CentOS LInux 启动关闭、服务管理

89421950 2010-06-12

CentOS下添加自启动及系统服务
1、运行chkconfig --list,发现没有linux服务列表中httpd,通过chkconfig --add httpd来添加,但是提示:httpd服务不支持 chkconfig。需要编辑/etc/rc.d/init.d/httpd,添加以下注释信息:

#chkconfig:3458515

#descrīption:Apache

第一行3个数字参数意义分别为:哪些Linux级别需要启动httpd(3,4,5);启动序号(85);关闭序号(15)。

保存后执行:chkconfig--addhttpd,成功添加。

在rc3.d、rc4.d、rc5.d路径中会出现S85httpd的链接文件,其他运行级别路径中会出现K61httpd的链接文件。

2、运行chkconfig --list,httpd在其中。
3、   /sbin/chkconfig 
       chkconfig <服务名> on  或
       chkconfig [--level <启动级别>] <服务名> <on|off|reset|resetpriorities>
-----------------------------------------------------------------------------------------------------
CentOS LInux启动关闭和服务管理(zt)
2008-04-06 10:10

CentOS启动顺序:CentOS LInux 启动关闭、服务管理

1.当我们按下电源按钮,把电源投入到机器中后,首先被启动执行的就是这个BIOS(BasicInput/Output System)程序。BIOS的功能是......并且访问硬盘先头512Bit的MBR(Master Boot Record)。

2.经BOIS的控制,将MBR中的BootRecord调入内存中。这里就要说说Linux的Boot程序了,Linux的Boot程序有GRUB和LILO,而CentOS默认的Boot程序是GRUB。

3.通过Boot程序,访问硬盘中的Linux内核程序。

4.将内核程序调入内存中。

5.内核程序调用完成后,通过内核访问硬盘中将要用到的其他文件。

内核第一个执行的文件是/sbin/init,而这个文件的设置和定义文件是/etc/inittab这个文件,也就是说/sbin/init按照/etc/inittab的定义来执行下一步的启动,那我们就要看看/etc/inittab文件是怎么回事儿了。
[root@linux ~]# cat -n /etc/inittab

1#

2#inittabThisfiledescribeshowtheINITprocessshouldsetup

3#thesysteminacertainrun-level.

4#

5#Author:MiquelvanSmoorenburg,<[email protected]>

6#ModifiedforRHSLinuxbyMarcEwingandDonnieBarnes

7#

8

9#Defaultrunlevel.TherunlevelsusedbyRHSare:

10#0-halt(DoNOTsetinitdefaulttothis)

11#1-Singleusermode

12#2-Multiuser,withoutNFS(Thesameas3,ifyoudonothavenetworking)

13#3-Fullmultiusermode

14#4-unused

15#5-X11

16#6-reboot(DoNOTsetinitdefaulttothis)

17#

18id:3:initdefault:←默认的启动模式

19

20#Systeminitialization.

21si::sysinit:/etc/rc.d/rc.sysinit←boot时的处理

22

23l0:0:wait:/etc/rc.d/rc0←23-29行,各启动模式的处理,分别启动/etc/rc.d/rcX.d脚本

24l1:1:wait:/etc/rc.d/rc1

25l2:2:wait:/etc/rc.d/rc2

26l3:3:wait:/etc/rc.d/rc3

27l4:4:wait:/etc/rc.d/rc4

28l5:5:wait:/etc/rc.d/rc5

29l6:6:wait:/etc/rc.d/rc6

30

31#TrapCTRL-ALT-DELETE

32ca::ctrlaltdel:/sbin/shutdown-t3-rnow←Ctrl+Alt+Del被激活时的处理

33

34#WhenourUPStellsuspowerhasfailed,assumewehaveafewminutes

35#ofpowerleft.Scheduleashutdownfor2minutesfromnow.

36#Thisdoes,ofcourse,assumeyouhavepowerdinstalledandyour

37#UPSconnectedandworkingcorrectly.

38pf::powerfail:/sbin/shutdown-f-h+2"PowerFailure;SystemShuttingDown"←电源off时的处理

39

40#Ifpowerwasrestoredbeforetheshutdownkickedin,cancelit.

41pr:12345:powerokwait:/sbin/shutdown-c"PowerRestored;ShutdownCancelled"←电源on时的处理

42

43

44#Rungettysinstandardrunlevels←45-50行是6个虚拟终端

451:2345:respawn:/sbin/mingettytty1

462:2345:respawn:/sbin/mingettytty2

473:2345:respawn:/sbin/mingettytty3

484:2345:respawn:/sbin/mingettytty4

495:2345:respawn:/sbin/mingettytty5

506:2345:respawn:/sbin/mingettytty6

51

52#Runxdminrunlevel5

53x:5:respawn:/etc/X11/prefdm-nodaemon←启动模式5的时候,启动/etc/X11窗口系统

[root@linux ~]#

在以上的这个文件中,#开头的文件是注释文件,可以忽略不看,但是能够很好的帮我们了解文件。

这个文件中的定义形势如下:

通过下表的说明去看这个文件,就清晰明了的多了!

<id>:<runlevel>:<action>:<process>

id不重复的任意数字
runlevel0~6的启动级别(模式)
action
initdefault定义默认时的启东级别(模式)
sysinit引导(boot)中执行
wait引导中执行一次,直到init进程为止
respawn进程停止的情况下,再启动
powerfall当接收到电源异常信号时,执行
ctrlaltdel当接收到Ctrl+Alt+Del指令时,执行
process

定义被执行的命令

通过上面的说明,我想你应该可以明白/etc/inittab中的定义是怎么一回事儿了。下面我们重点看18,21,26行(其他的自己研究)。通过上表我们可以知道:
  • 18行的定义是默认的启动级别是“3“文本模式。
  • 21行的定义是启动的过程中执行/etc/rc.d/rc.sysinit文件(启动级别是空,也就是说无论什么级别都执行这个文件),这个文件很长有差不多1000行的内容,主要功能是启动网络,读取文件系统,使swap有效化和调入模块等动作。
  • 26行的定义和上面的18行的定义是对应的,也就是说18行定义的启动级别是"X",那么就执行文件23到29行定义中的"X"。

   这里18行定义的是启动级别3,就执行26行中启动级别3的定义,执行/etc/rc.d/rc脚本文件(控制文件),并将18行定义的启动级别以参数的形势交给/etc/rc.d/rc文件进行处理。这里我们看到“l3:3:wait:/etc/rc.d/rc 3”是把启动级别3交给文件rc处理,那我们有必要看看rc文件都定义了什么。/etc/rc.d/rc文件内容如下:

[root@linux ~]# cat -n /etc/rc.d/rc

1#!/bin/bash

2#

3#rcThisfileisresponsibleforstarting/stopping

4#serviceswhentherunlevelchanges.

5#

6#OriginalAuthor:

7#MiquelvanSmoorenburg,<[email protected]>

8#

9

10#checkafiletobeacorrectrunlevelscript

11check_runlevel()

12{

13#Checkifthefileexistsatall.

14[-x"$1"]||return1

15

16#Rejectbackupfilesandfilesgeneratedbyrpm.

17case"$1"in

18*.rpmsave|*.rpmorig|*.rpmnew|*~|*.orig)

19return1

20;;

21esac

22return0

23}

24

25#Nowfindoutwhatthecurrentandwhatthepreviousrunlevelare.

26argv1="$1"

27set`/sbin/runlevel`

28runlevel=$2

29previous=$1

30exportrunlevelprevious

31

32./etc/init.d/functions

33

34#Seeifwewanttobeinuserconfirmationmode

35if["$previous"="N"];then

36if[-f/var/run/confirm];then

37echo$"Enteringinteractivestartup"

38else

39echo$"Enteringnon-interactivestartup"

40fi

41fi

42

43#Getfirstargument.Setnewrunleveltothisargument.

44[-n"$argv1"]&&runlevel="$argv1"

45

46#Isthereanrcdirectoryforthisnewrunlevel?

47[-d/etc/rc$runlevel.d]||exit0

48

49#First,runtheKILLscripts.

50foriin/etc/rc$runlevel.d/K*;do

51check_runlevel"$i"||continue

52

53#Checkifthesubsystemisalreadyup.

54subsys=${i#/etc/rc$runlevel.d/K??}

55[-f/var/lock/subsys/$subsys-o-f/var/lock/subsys/$subsys.init]\

56||continue

57

58#Bringthesubsystemdown.

59ifegrep-q"(killproc|action)"$i;then

60$istop

61else

62action$"Stopping$subsys:"$istop

63fi

64done

65

66#NowruntheSTARTscripts.

67foriin/etc/rc$runlevel.d/S*;do

68check_runlevel"$i"||continue

69

70#Checkifthesubsystemisalreadyup.

71subsys=${i#/etc/rc$runlevel.d/S??}

72[-f/var/lock/subsys/$subsys-o-f/var/lock/subsys/$subsys.init]\

73&&continue

74

75#Ifwe'reinconfirmationmode,getuserconfirmation

76if[-f/var/run/confirm];then

77confirm$subsys

78test$?=1&&continue

79fi

80

81update_boot_stage"$subsys"

82#Bringthesubsystemup.

83if["$subsys"="halt"-o"$subsys"="reboot"];then

84exportLC_ALL=C

85exec$istart

86fi

87ifegrep-q"(daemon|action|success|failure)"$i2>/dev/null\

88||["$subsys"="single"-o"$subsys"="local"];then

89$istart

90else

91action$"Starting$subsys:"$istart

92fi

93done

94rm-f/var/run/confirm

95if[-x/usr/bin/rhgb-client]&&/usr/bin/rhgb-client--ping;then

96/usr/bin/rhgb-client--quit

97fi

[root@linux ~]#

在这个文件中我们看看如下的几行:

  • 50行以K开头的脚本文件
  • 60行执行stop
  • 67行以S开头的脚本文件
  • 91行执行start

在这个文件中,每个程序块的部分都有注释(#开头的行),如果有兴趣的话可以自行研究一下。似乎不是那么太难,就是check→do,确认后执行,判断后执行的样子。rc.d目录下面的文件:

[root@linux ~]# ls -l /etc/rc.d

总用量112

drwxr-xr-x2rootroot409612月2812:45init.d

-rwxr-xr-x1rootroot23522004-03-17rc

drwxr-xr-x2rootroot409612月2812:45rc0.d

drwxr-xr-x2rootroot409612月2812:45rc1.d

drwxr-xr-x2rootroot409612月2812:45rc2.d

drwxr-xr-x2rootroot409612月2812:45rc3.d

drwxr-xr-x2rootroot409612月2812:45rc4.d

drwxr-xr-x2rootroot409612月2812:45rc5.d

drwxr-xr-x2rootroot409612月2812:45rc6.d

-rwxr-xr-x1rootroot2202003-06-24rc.local

-rwxr-xr-x1rootroot275848月1317:10rc.sysinit

[root@linux ~]#

我们看到了,在这个目录下面,有刚才提到的rc文件,还有另外的一些文件,我们来简单说明一下。

1.init.d

这个不是文件,是一个目录,这个目录下面存放着各各服务的控制脚本,这下面的文件和你安装了些什么软件包有关系。如果你有兴趣你可以察看他们的脚本文件,接下来的说明中我们还会说到他,因为/etc/rc.d/rcX.d下的文件和这个init.d下面的文件是通过软连接相连的。

2.rc

这个文件我们上面提到过,跳过了。

3.rc.loca

这个文件也许会用到,如果你安装了一些软件或服务,并非系统标准的服务,比如手动的安装了Httpd,这样你用chkconfig命令是无法操作httpd的,开启服务器的时候也并不默认的启动这个httpd服务,这个时候你就可以将启动命令写到这个文件中,让开机启动服务完毕之后,最后启动这个httpd服务,注意是最后。这里说的httpd只是一个例子,将来也许会有很多的自己安装的服务会用到这个文件,知道一下,要用到的时候自然就明白。当然还有另外一种方法,就是自己写一个启动脚本文件,让系统开机时读取脚本文件来对httpd进行启动操作

4.rc.sysini

我们上面提到过这个文件,这个文件是在boot的时候就被执行的脚本,它的任务是初始化系统的网络,设定hostname,欢迎信息表示,时钟设置,挂载文件系统等。有兴趣可以读它的脚本文件。

5.rcX.d

这个rcX.d里面的X代表了0~6的数字(6种启动模式)。我们看到了它们都是目录,下面放着的都是我们上面说的/etc/rc.d/init.d下面文件的link。这里我们已rc3.d为例子,简单说明一下。

在察看这个文件的时候注意2点:

##第一:ls-l察看它们的详细信息,看看他们的link指向

##第二:ls-l察看它们的文件名的头字母,形式应该是这样的[S或K<数字><名称>]的形势。S代表启动,K代表停止。

不要迷糊,/etc/rc.d/rc就定义了这个文件名称头文字的“S”和“K”。也就是开机的时候,已S开头的脚本文件别执行,这个服务就被开机运行;那么已K开头的文件不被执行,这个文件所控制的服务也不被执行,这个文件控制的服务也不被开机运行。

这样看来,我们在给服务器左右化的时候,就可以直接的将相应的启动模式(rc0.d~rc6.d)下的相应服务控制脚本的文件名改掉(S改成K,K改成S),就能够简单的优化开机时系统将运行哪儿些个服务。

如果通过命令来控制的话,那命令是chkconfig命令.......编辑中......

如果你察看过rc0.d~rc6.d的目录下的文件名称,你会发现,他们以S开都得文件名数量是不同的。

/etc/rc.d/rc3.d下都有什么(一部分而已,你可以在自己的系统下面察看全部)
[root@linux ~]# ls -l /etc/rc.d/rc3.d

合計224

lrwxrwxrwx1rootroot211月505:24K01tog-pegasus->../init.d/tog-pegasus

lrwxrwxrwx1rootroot131月505:12K01yum->../init.d/yum

lrwxrwxrwx1rootroot241月505:12K02NetworkManager->../init.d/NetworkManager

lrwxrwxrwx1rootroot151月505:12K03rhnsd->../init.d/rhnsd

lrwxrwxrwx1rootroot191月505:08K05saslauthd->../init.d/saslauthd

lrwxrwxrwx1rootroot161月505:11K10psacct->../init.d/psacct

lrwxrwxrwx1rootroot171月505:25K12FreeWnn->../init.d/FreeWnn

lrwxrwxrwx1rootroot131月505:12K20nfs->../init.d/nfs

lrwxrwxrwx1rootroot141月505:11K24irda->../init.d/irda

lrwxrwxrwx1rootroot161月505:10K50ibmasm->../init.d/ibmasm

lrwxrwxrwx1rootroot171月505:12K50netdump->../init.d/netdump

lrwxrwxrwx1rootroot161月505:26K73ypbind->../init.d/ypbind

[root@linux ~]#

接下来我们看看控制服务的一些工具

chkconfig

setup

system-config-services

我们分别来看看这3个工具(如果还有别的,告诉我)

chkconfig

这个工具我们很熟悉,并且在我们的网站配置祥解中也提到过他的使用。

执行权限:root

命令路径:/sbin/chkconfig

使用法:

chkconfig<服务名>on#这个和接下来的off这个其实就是把以K开头的脚本文件从命名

chkconfig<服务名>off#如果你有兴趣自己试验一下就知道了

chkconfig--list[服务名]

chkconfig--add<服务名>

chkconfig--del<服务名>

chkconfig[--level<启动级别>]<服务名><on|off|reset|resetpriorities>

setup

是系统综合的配置工具,命令行下也可以用。这个不多说,操作一下就知道怎么回事了。

system-config-services

如果你安装了gnome这样的窗口桌面系统,你也可以使用这个工具来体验下鼠标点击带来的方便。(如果你安装了桌面系统,可以#system-config加Tab键,会有很多工具的执行命令,体会下。)

主要服务参照:

http://www.centospub.com/bbs/viewthread.php?tid=1851&extra=page%3D1

以上是Linux系统(CentOS)的启动流程和服务管理相关的一点儿知识,如果有不足大家补充。非常感谢纠错的朋友们,感谢你们的支持。

from:http://www.centospub.com/bbs/viewthread.php?tid=1295&highlight=

--End--

相关推荐