1. 概述

Linux 服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了 Linux 的系统功能接口,直接面向应用程序和用户。提供这些服务的程序是由运行在后台的守护进程(daemons)来执行的,有些书籍和资料也把守护进程称作“服务”。守护进程是生存期长的一种进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件,常常在系统引导装入时启动,在系统关闭时终止。Linux 系统有很多守护进程,大多数服务器都是用守护进程实现的。同时,守护进程完成许多系统任务,比如,作业规划进程 crond、打印进程 lqd 等,用户可以根据具体需求来决定运行哪些守护进程。

Redhat 系查看或启动守护进程对应服务的命令是:​​chkconfig​​​、​​ntsysv​​,ntsysv 是一个类图形界面管理模式来设置各种服务开机启动的工具,它们都需要 root 权限运行。

Debian 系则可以用命令 ​​service​​​ 完成这些功能,例如:查看服务 ​​service --status-all​​​ ,启动服务 ​​service xxx start​​ 等。

此外,还有 ​​netstat​​,用于查看目前已经启动的服务。

这里提供几种启动守护进程的方法:

  1. 在系统期间通过系统的初始化脚本启动守护进程。这些脚本通常在目录 /etc/rc.d
  2. 很多网络服务程序是由​​inetd​​ 守护程序启动的。它监听各种网络请求,如 telnet、ftp 等,在请求到达时启动相应的服务器程序(telnet server、ftp server 等)。
  3. 由​​cron​​ 定时启动的处理程序。这些程序在运行时实际上也是一个守护进程。
  4. 由​​at​​ 启动的处理程序。
  5. 守护程序也可以从终端启动,通常这种方式只用于守护进程的测试,或者是重起因某种原因而停止的进程。
  6. 在终端上用​​nohup​​ 启动的进程。用这种方法可以把所有的程序都变为守护进程。

2. 守护进程工作原理和方式

在 Client/Server 模式下。服务器监听(listen)在一个特定的端口上等待客户连接。连接成功后服务器和客户端通过端口进行数据通信。守护进程的工作就是打开一个端口,并且等待(listen)进入连接。如果客户端产生一个连接请求,守护进程就创建(fork)一个子服务器响应这个连接,而主服务器继续监听其他的服务请求。

2.1 守护进程工作方式

2.1.1 运行独立的(stand-alone)守护进程

独立运行的守护进程由 init 脚本负责管理,所有独立运行的守护进程的脚本在 ​​/etc/rc.d/init.d/​​ 目录下。系统服务都是独立运行的守护进程包括:syslogdcron 等。运行独立的守护进程工作方式称作:stand-alone,是 Unix 传统的 C/S 模式的访问模式。服务器监听(listen)在一个特点的端口上等待客户端的联机。如果客户端产生一个连接请求,守护进程就创建(fork)一个子服务器响应这个连接,而主服务器继续监听。以保持多个子服务器池等待下一个客户端请求。

工作在 stand-alone 模式下的网络服务有 route、gated。另外,还有大家熟悉的 Web 服务器 Apache、邮件服务器 Sendmail、域名服务器 Bind。在 Linux 系统中通过 stand-alone 工作模式启动的服务由 ​​/etc/rc.d/​​ 下面对应的运行级别当中的符号链接启动。

2.1.2 xinetd 模式

从守护进程的概念可以看出,对于系统所要通过的每一种服务,都必须运行一个监听某个端口连接所发生的守护进程,这通常意味着资源浪费。为了解决这个问题,Linux 引进了“网络守护进程服务程序”的概念。Redhat Linux 9.0 使用的网络守护进程是 xinted(eXtended InterNET daemon)。和 stand-alone 模式相比,xinted 模式也称 Internet Super-Server(超级服务器)。xinetd 能够同时监听多个指定的端口,在接受用户请求时,它能够根据用户请求的端口不同,启动不同的网络服务进程来处理这些用户请求。可以把 xinetd 看做一个管理启动服务的管理服务器,它决定把一个客户请求交给那个程序处理,然后启动相应的守护进程。

和 stand-alone 工作模式相比,系统不想要每一个网络服务进程都监听其服务端口。运行单个 xinetd 就可以同时监听所有服务端口,这样就降低了系统开销,保护系统资源。但是对于访问量大、经常出现并发访问时,xinetd 想要频繁启动对应的网络服务进程,反而会导致系统性能下降。查看系统为 Linux 服务提供那种模式的方法是在 Linux 命令行使用 ​​pstree​​ 命令,可以看到两种不同方式启动的网络服务。一般来说系统一些负载高的服务: sendmail、Apache 服务是单独启动的。而其他服务类型都可以使用 xinetd 超级服务器管理。


Linux 系统服务

下面介绍一下 Linux 系统中部分系统服务及功能(Redhat 系统,以英文字母为序):

服务名称

功能描述

alsasound

Alsa 声卡驱动守护程序。Alsa声卡驱动程序本来是为了 一种声卡Gravis UltraSound (GUS) 而写的,该程序被证明很优秀,于是作者就开始为一般的声卡写 驱动程序。 Alsa和OSS/Free 及OSS/Linux兼容,但是有自己的接 口,甚至比OSS优秀。

acpid

acpid(Advanced Configuration and Power Interface)是为替代传统的APM电源管理标准而推出的新型电源管理标准。通常笔记本电脑需要启动电源进行管理。

atalk

AppleTalk网络守护进程。注意不要在后台运行该程序,该程序的数据结构必须在运行其他进程前先花一定时间初始化。

amd

自动安装NFS守护进程。

anacron

一个自动化运行任务守护进程。Red Hat Linux 随带四个自动化任务的工具:cron、 anacron、at、和 batc。当你的Linux服务器并不是全天运行,这个anacron就可以帮你执行在"crontab"设定的时间内没有执行的工作。

apmd

apmd(Advanced Power Management)是高级电源管理。传统的电源管理标准,对于笔记本电脑比较有用,可以了解系统的电池电量信息。并将相关信息通过syslogd 写入日志。也可以用来在电源不足时关机。

arptables_jf

为 arptables 网络的用户控制过滤的守护进程。

arpwatch

记录日志并构建一个在LAN接口上看到的以太网地址和IP地址对数据库 。

atd

at 和 batch 命令守护进程,用户用 at 命令调度的任务。Batch 用于在系统负荷比较低时 运行批处理任务。

autofs

自动安装管理进程 automount,与 NFS 相关,依赖于 NIS 服务器。

bootparamd

引导参数服务器,为 LAN 上的无盘工作站提供引导所需的相关信息。

bluetooch

蓝牙服务器守护进程。

crond

cron 是 Unix 下的一个传统程序,该程序周期地运行用户 调度的任务。比起传统的 Unix 版本,Linux 版本添加了不少属性,而且更安全,配置更简单。类似计划任务。

chargen

使用tcp协议的chargen server,chargen(Character Generator Protocol)是一种网络服务,主要功能是提供类似远程打字的功能。

chargen-udp

使用UDP协议的chargen server。

cpuspeed

监测系统空闲百分比,降低或加快CPU时钟速度和电压从而在系统空闲时将能源消耗降为最小,而在系统繁忙时最大化加快系统执行速度。

dhcpd

动态主机控制协议(Dynamic Host Control Protocol)的服务守护进程。

cups

cups(Common UNIX Printing System)是通用UNIX打印守护进程,为Linux提供第三代打印功能。

cups-config-daemons

cups打印系统切换守护进程。

cups-lpd

cups行打印守护进程。

daytime

使用TCP 协议的Daytime守护进程,该协议为客户机实现从远程服务器获取日期 和时间的功能。预设端口:13。

daytime-udp

使用UDP 协议的Daytime守护进程。

dc_server

使用SSL安全套接字的代理服务器守护进程。

dc_client

使用SSL安全套接字的客户端守护进程。

diskdump

服务器磁盘备份守护进程。

echo

服务器回显客户数据服务守护进程。

echo-udp

使用UDP协议的服务器回显客户数据服务守护进程。

eklogin

接受rlogin会话鉴证和用kerberos5加密的一种服务的守护进程。

gated

网关路由守护进程。它支持各种路由协议,包括RIP版本1和2、DCN HELLO协议、 OSPF版本2以及EGP版本2到4。

gpm

gpm(General Purpose Mouse Daemon )守护进程为文本模式下的Linux程序如mc (Midnight Commander) 提供了鼠标的支持。它也支持控制台下鼠标 的拷贝,粘贴操作以及弹出式菜单。

gssftp

使用kerberos 5认证的ftp守护进程

httpd

Web服务器Apache守护进程,可用来提供HTML文件以 及CGI动态内容服务。

inetd

因特网操作守护程序。监控网络对各种它管理的服务的需求,并在必要的时候启动相应的服务程序。在Redhat 和Mandrake linux中被xinetd代替。Debian, Slackware, SuSE仍然使用。

innd

Usenet新闻服务器守护进程。

iiim

中文输入法服务器守护进程。

iptables

iptables防火墙守护进程。

irda

红外端口守护进程。

isdn

isdn启动和中止服务守护进程。

krb5-telnet

使用kerberos 5认证的telnet守护进程。

klogin

远程登陆守护进程。

keytable

该进程的功能是转载在/etc/sysconfig/keyboards里定义的键盘映射表,该表可以通过kbdconfig工具进行选择。您应该使该程序处于激活状态。

irqbalance

对多个系统处理器环境下的系统中断请求进行负载平衡的守护程序。如果你只安装了一个CPU,就不需要加载这个守护程序。

kshell

kshell守护进程。

kudzu

硬件自动检测程序,会自动检测硬件是否发生变动,并相应进行硬件的添加、删除工作。当系统启动时,kudzu会对当前的硬件进行检测,并且和存储在 /etc/sysconfig/hwconf中的硬件信息进行对照,如果某个硬件从系统中被添加或者删除时,那么kudzu就会察觉到,并且通知用户是否进行相关配置,然后修改etc/sysconfig/hwconf,使硬件资料与系统保持同步。如果/etc/sysconfig/hwconf这个文件不存在,那么kudzu将会从/etc/modprobe.conf,/etc/sysconfig/network-scripts/和 etc/X11/XF86Config中探测已经存在的硬件。如果你不打算增加新硬件,那么就可以关闭这个启动服务,以加快系统启动时间。

ldap

ldap(Lightweight Directory Access Protocol)目录访问协议服务器守护进程。

lm_seroems

检测主板工作情况守护进程。

lpd

lpd是老式打印守护程序,负责将lpr等程序提交给打印 作业。

mdmonitor

RAID相关设备的守护程序。

messagebus

D-BUS是一个库,为两个或两个以上的应用程序提供一对一的通讯。 dbus-daemon-1是一个应用程序,它使用这个库来实现messagebus守护程序。多个应用程序通过连接messagebus守护程序可以实现与其他程序交换信息。

microcode_ctl

可编码以及发送新的微代码到内核以更新Intel IA32系列处理器守护进程。

mysqld

一个快速高效可靠的轻型SQL数据库引擎守护进程。

named

DNS(BIND)服务器守护进程。

netplugd

netplugd(network cable hotplug management daemon)守护程序,用于监控一个或多个网络接口的状态,当某些事件触发时运行一个外部脚本程序。

netdump

远程网络备份服务器守护进程。

netfs

Network Filesystem Mounter,该进程安装和卸载NFS、SAMBA和NCP网络文件系统。

nfs

网络文件系统守护进程。

nfslock

NFS是一个流行的通过TCP/IP网络共享文件的协议,此守护进程提供了NFS文件锁定功能。

ntpd

Network time Protocol daemon(网络时间校正协议)。ntpd是用来使系统和一个精确的时间源保持时间同步的协议守护进程。

network

激活/关闭启动时的各个网络接口守护进程。

psacct

该守护进程包括几个工具用来监控进程活动的工具,包括ac,lastcomm, accton 和sa。

pcmcia

主要用于支持笔记本电脑接口守护进程。

portmap

该守护进程用来支持RPC连接,RPC被用于NFS以及NIS 等服务。

postgresql

PostgreSQL 关系数据库引擎。

proftpd

proftpd 是Unix下的一个配置灵活的ftp服务器的守护程序。

pppoe

ADSL连接守护进程。

random

保存和恢复系统的高质量随机数生成器,这些随机数是系 统一些随机行为提供的。

rawdevices

在使用集群文件系统时用于加载raw设备的守护进程。

readahead、readahead_early

readahead 和 readahead_early是在Fedora core 2中最新推出的两个后台运行的守护程序。其作用是在启动系统期间,将启动系统所要用到的文件首先读取到内存中,然后在内存中进行执行,以加快系统的启动速度。

rhnsd

Red Hat 网络服务守护进程。通知官方的安全信息以及为系统打补丁。

routed

该守护程序支持RIP协议的自动IP路由表维护。RIP主要 使用在小型网络上,大一点的网络就需要复杂一点的协议。

rsync

remote sync远程数据备份守护进程。

rsh

远程主机上启动一个shell,并执行用户命令。

rwhod

允许远程用户获得运行rwho守护程序的机器上所有已登录用户的列表。

rstatd

一个为LAN上的其它机器收集和提供系统信息的守候进程。

ruserd

远程用户定位服务,这是一个基于RPC的服务,它提供关于当前记录到LAN上一个机器日志中的用户信息

rwalld

激活rpc.rwall服务进程,这是一项基于RPC的服务,允许用户给每个注册到LAN机器上的其他终端写消息 。

rwhod

激活rwhod服务进程,它支持LAN的rwho和ruptime服务。

saslauthd

使用SASL的认证守护进程。

sendmail

邮件服务器sendmail守护进程。

smb

Samba文件共享/打印服务守护进程。

snmpd

本地简单网络管理守护进程。

squid

代理服务器squid守护进程。

sshd

OpenSSH服务器守护进程。Secure Shell Protocol可以实现安全地远程管理主机。

smartd

Self Monitor Analysis and Reporting Technology System,监控你的硬盘是否出现故障。

syslog

一个让系统引导时起动syslog和klogd系统日志守候进程的脚本。

time

该守护进程从远程主机获取时间和日期,采用TCP协议。

time-udp

该守护进程从远程主机获取时间和日期,采用UDP协议。

tux

在Linux内核中运行apache服务器的守护进程。

vsftpd

vsftpd服务器的守护进程。

vncserver

VNC (Virtual Network Computing,虚拟网络计算),它提供了一种在本地系统上显示远程计算机整个"桌面"的轻量型协议。

xfs

X Window字型服务器守护进程,为本地和远程X服务器提供字型集。

xinetd

支持多种网络服务的核心守护进程。

ypbind

为NIS(网络信息系统)客户机激活ypbind服务进程 。

yppasswdd

NIS口令服务器守护进程。

ypserv

NIS主服务器守护进程。

yum

RPM操作系统自动升级和软件包管理守护进程。