linux的运行模式:runlevel 启动项 服务

linux操作系统自从开始启动至启动完毕需要经历几个不同的阶段,这几个阶段就叫做runlevel,同 样,当linux操作系统关闭时也要经历另外几个不同的runlevel,下面我们就准备详细介绍一下runlevel,并向您展示一些小技巧来让您的 linux系统避免不必要的重启动。 . 

runlevel可以认为是系统状态,形象一点,您可以认为runlevel有点象微软的windows操作系统中的 Normal,safemode,和Command prompt only。进入每个runlevel都需要启动或关闭相应的一系列服务(services),这些服务(services)以初始化脚本的方式放置于目录 /etc/rc.d/rc?.d/或者/etc/rc?.d下面(?代表runlevel的对应序号).

在大多数的linux发行版本中,通常有8个runlevel ..

Runlevel System State
0 Halt the system
# 0 - 停机(千万不能把initdefault 设置为0 )
1 Single user mode # 1 - 单用户模式
2 Basic multi user mode # 2 - 多用户,没有 NFS
3 Multi user mode # 3 - 完全多用户模式(标准的运行级)

# 4 - 没有用到
5 Multi user mode with GUI # 5 - X11 (xwindow)
6 Reboot the system
S, s Single user mode
# 6 - 重新启动 (千万不要把initdefault 设置为6——把被你黑掉的linux的initdefault设置为0或6也算是拒绝服务攻击噢!)

 

 

多数的桌面的linux系统缺省的runlevel是5,用户登陆时是图形界面,而多数的服务器版本的 linux系统缺省的runlevel是3,用户登陆时是字符界面,runlevel 1和2除了调试之外很少使用,runlevel s和S并不是直接给用户使用,而是用来为Single user mode作准备。 ..

linux的运行模式比起windows的启动模式的优势在于:你可以在系统空闲时使用.init工具切换你现在使用的runlevel,另外,当 你关闭或者启动linux系统时你已经不知不觉中切换你的runlevel,系统关机进程需要调用runlevel(0或6)来关闭所有正在运行中的进 程。 !

显示当前运行模式 .

刚入门时,你或许对先前和目前正在使用中的运行模式很好奇,runlevel命令可以用来显示这些信息:
$ /sbin/runlevel
3 5
runlevel命令的输出结果表明最初的运行模式是3,而现在的运行模式是5。
. 


切换运行模式使用telinit命令(root用户):
$ /sbin/telinit
通常,切换运行模式的目的是重启某些应用进 程,比如XFree86,将运行模式从5切换到3将终止XFree86以及与之相关的所有进程,然后再把运行模式切换到5,XFree86就可以很干净的 启动。在做这些工作之前,请确保所有在XFree86下的工作都已经保存,用root用户:
$ /sbin/telinit 3
$ /sbin/telinit 5
在键入命令之后,你的屏幕可能会显示一些服务启动或者停止的信息。
.

在运行模式中加入启动服务 ..

要在某个运行模式中加入一个启动服务,首先要新建该服务启动脚本,然后把它放置于/etc/rc.d/init.d或者/etc/init.d /(根据你的linux版本有所不同),要将该启动脚本与运行模式关联起来,你需要这个运行模式的目录下建立一个与/etc/rc.d/init.d/下 启动脚本的symbolic link,文件名的前缀通常为SXX,XX为数字,这个数字是用来控制该运行模式下服务的启动顺序。脚本的执行顺序是按照数字大小升序执行,就是数字越小 越先执行,下面就是一个在运行模式中加入启动服务具体的例子:
$ cp myservice /etc/rc.d/init.d/
$ ln -s /etc/rc.d/init.d/myservice /etc/rc3.d/S99myservice

这样,下次以runlevel 3启动时,myservice就会自动启动。


以某个runlevel启动

你可以自己制定启动时所进入的runlevel,如果你的系统使用的是lilo,在启动命令中将相应的部分为:
LILO: linux 5
如果你使用的是GRUB,在启动时你可以按住e键进入设置模式,相应的位置显示为:
kernel /vmlinuz ro root=/dev/hda1 5

 

应用设置:

 

linux下设置程序(服务)开机自启动的几种方法

1,
这种也是最常用的一种

rcconf:

 

sudo apt-get install rcconf

 

root 下运行: rcconf

 

功能更全的:sysv-rc-conf

 

sudo apt-get install sysv-rc-conf

 

运行:sysv-rc-conf

这个改起来很简单,如下图:

linux的运行模式:runlevel 启动项 服务

 

2,

 

直接改/etc/rc0.d ~ /etc/rc6.d和/etc/rcS.d下的东西,S开头的表示启动,K开头的表示不启动,

例如:想关闭vsftpd的开机自动启动,只需sudo mv /etc/rc2.d/S20vsftpd /etc/rc2.d/K20vsftpd就可以了。 

这条命令的用意就是利用mv的重命名功能。

 

3,chkconfig ,这种方法在redhat,Debian里面比较常用,在fedora和ubuntu里面用方法1比较简单,但是学习一下这种方法也是不错的。

但在ubuntu下这个命令没有redhat好用,老是出错.

算了,还是直接看一下redhat里面chkconfig的用法吧.

1,chkconfig --level [0123456] [service name] [on|off]

chkconfig --level 23 dhcp3-server off ----设定dhcp server服务在level2,3下关闭.

2,chkconfig --list 查看服务的自动开启状态

3,chkconfig --add 增加一个服务给chkconfig来管理,但是该服务必须在/etc/init.d内 .

例子,

1,gedit /etc/init.d/test

chkconfig:[runlevels] [start number] [stop number]

chkconfig: 23 80 70

其中start number 代表S80test

stop number 代表K70test

2,chkconfig --add test

3,chkconfig --list test

test 0:off 1:off 2:on 3:on 4:off 5:off 6:off

4,check /etc/rc.d/下的档案

find /etc/rc.d -type l | grep 'test' |sort

/etc/rc.d/rc0.d/K70test

/etc/rc.d/rc1.d/K70test

/etc/rc.d/rc2.d/S80test

/etc/rc.d/re3.d/S80test

 

/etc/rc.d/rc4.d/K70test

 

/etc/rc.d/rc5.d/K70test

 

/etc/rc.d/rc6.d/K70test

 

/etc/rc.d/rc7.d/K70test

 

 

 

 

-type l代表“连接文件”

 

 

4,chkconfig --del 删除一个给chkconfig管理的服务

5,显示目前run level 2为启动的服务

chkconfig --list | grep '3:on'

 

 

 

如果以上方法在Ubuntu 10.04中不起作用 ,例如mysql 和 vsftpd在按照上面设置后仍会开机启动

那么你需要做下面一些工作:

进入/etc/init/目录

cp /etc/init/

你会发现这里面有mysql.conf 和 vsftpd.conf文件

不错就是这两个文件需要稍作修改

在文件的开头都有

start on (filesystem and net-device-up IFACE!=lo)
stop on runlevel [xxxx]    #xxxx是表示runlevel的级别如:2345表示runlevel 2、3、4、5

在我的vsftpd.conf中是

stop on runlevel [!2345] #表示在非2、3、4、5的runlevel就不启动

这里就是问题的关键,我们的系统是默认以runlevel 2启动的

所以我们可以把它改为

stop on runlevel [0126] #当然可以不是这样,但至少要包括2

 

你可能感兴趣的:(linux,redhat,Debian,user,脚本,ubuntu)