首页 > 代码库 > 认识linux系统服务(daemons)

认识linux系统服务(daemons)

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提供了一个命令来管理系统服务默认开机启动与否:chkconfig
chkconfig [--level [0123456]] [服务名称] [on|off]
例如:我们将vsftpd服务设置成开机自启动
[root@rhl6 init.d]# chkconfig --level 3 vsftpd on 
[root@rhl6 init.d]# chkconfig --list | grep vsftpd
vsftpd          0:off   1:off   2:off   3:on    4:off   5:off   6:off
可以看出,在运行级别为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]# 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] [服务名称]
参数:
--add:增加一个服务名称给chkconfig来管理,该服务名称必须在/etc/init.d/内
--del:删除一个给chkconfig管理的服务
具体的例子可关注后续memcached服务启动的博客。






认识linux系统服务(daemons)