linux系统服务分类
一般分成两大类,独立启动的服务以及超级服务。
1、stand_alone:此daemon可以自行单独启动服务。
2、super daemon:一个特殊的daemon来统一管理。
服务与端口的对应
系统提供的网络服务通常会与端口进行对应,在文件/etc/services中可以查看各个服务与端口的对应。
在文件中可查看ftp的端口号:
ftp 21/tcp
ftp 21/udp fsp fspd
daemon的启动脚本与启动方式
stand alone的启动方式
服务的启动脚本在/etc/init.d目录下,该目录是个链接目录,实际目录是/etc/rc.d/init.d。这里面的脚本会检测环境、查找配置文件以及其他的一些准备工作,然后调用服务程序。一般都是以下面的形式进行调用,command对应/etc/init.d目录下的shell脚本:
command (start|stop|status)
如查看ftp服务的状态:
[root@rhl6 init.d]# ./vsftpd status
vsftpd is stopped
如上面所述,vsftpd是/etc/init.d目录下的一个shell脚本。
除了使用这种方式对服务进行启动、停止、查看状态外,linux还提供了一个shell脚本:service。
所以查看ftp服务的状态还可以用如下的方式:
[root@rhl6 init.d]# service vsftpd status
vsftpd is stopped
service脚本在/etc/init.d目录下查找第一个参数指定的shell脚本,然后调用该shell脚本,并将第二个参数作为此shell脚本的参数。其实质还是和上面的那种调用方式一样。具体的实现细节可以查看service脚本的实现。
super daemon的启动方式
其实super daemon本身是一个stand alone服务(默认情况下,xinetd没有安装。),根据其管理的服务的配置文件,再对其他服务进行管理。
其管理的服务配置文件在/etc/xinetd.d目录下,默认值配置文件在/etc/xinetd.conf中。
如,要启动由xinetd管理的rsync服务,需修改文件/etc/xinetd.d/rsync,将disable=yes修改为disable=yes:
# default: off
# description: The rsync server is a good addition to an ftp server, as it \
# allows crc checksumming etc.
service rsync
{
disable = no
flags = IPv6
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
然后重新启动xinetd:
service xinetd restart
设置开机后立即启动服务
我们先了解下Linux主机是怎么开机的: 1、打开计算机电源,开始读取BIOS并进行主机的自我测试; 2、通过BIOS取得第一个可开机设备,读取主要开机区(MBR)取得启动装载程序; 3、通过启动装载程序的设置,取得kernel并加载内存且检测系统硬件; 4、内核主动调用init进程; 5、init进程开始执行系统初始化(/etc/rc.d/rc.sysinit); 6、依据init的设置进行daemonstart(/etc/rc.d/rc[0-6].d/*); 7、加载本机设置(/etc/rc.d/rc.local)。从上面的步骤可知,我们只需要对rc[0-6].d目录下的服务进行修改即可设置服务的开机自启动。
chkconfig:设置系统服务
方便的是,linux提供了一个命令来管理系统服务默认开机启动与否:chkconfigchkconfig [--level [0123456]] [服务名称] [on|off]例如:我们将vsftpd服务设置成开机自启动
[root@rhl6 init.d]# chkconfig --level 3 vsftpd on可以看出,在运行级别为3的情况下,vsftpd将会自动启动。 对于0-6不同的运行级别,有/etc/rc.d/rc[0-6].d与之对应。在各目录下,有S或K开头的文件,指向了/etc/rc.d/init.d/*目录。S代表start启动,K代表stop停止。 在系统启动时,会调用/etc/rc.d/rc脚本来执行不同目录下的脚本: 1、根据不同的运行级别,调用不同rc[0-6].d的目录; 2、找到/etc/rc.d/rcN.d/K??*开头的文件,并进行"/etc/rc.d/rcN.d/K??*stop"的操作; 3、找到/etc/rc.d/rcN.d/S??*开头的文件,并运行"/etc/rc.d/rcN.d/S??*start"的操作。 例如,上面设置vsftpd自启动后,对应的rc3.d目录下的文件就发生了变化:
[root@rhl6 init.d]# chkconfig --list | grep vsftpd
vsftpd 0:off 1:off 2:off 3:on 4:off 5:off 6:off
[root@rhl6 init.d]# ls -l /etc/rc.d/rc3.d/ | grep vsftpd
lrwxrwxrwx. 1 root root 16 Nov 30 13:25 S60vsftpd -> ../init.d/vsftpd
chkconfig:设置自己的系统服务
需要在/etc/init.d目录下新建一个shell脚本,然后执行chkconfig命令将该目录添加到chkconfig管理的服务中。[root@rhl6 init.d]# chkconfig [--add|--del] [服务名称]具体的例子可关注下一篇博客《memcached服务启动及开机启动》。
参数:
--add:增加一个服务名称给chkconfig来管理,该服务名称必须在/etc/init.d/内
--del:删除一个给chkconfig管理的服务