系统服务 编辑 请登陆,再编辑

简介

常驻在内存的程序,且可以提供一些系统或网络功能,那就是服务。而服务一般的英文说法是service。

但如果你常常上网去查看一些数据的话,尤其是 Unix-Like 的相关操作系统,应该常常看到请启动某某 daemon 来提供某某功能,那么 daemon 与 service 有关?否则为什么都能够提供某些系统或网络功能?此外,这个 daemon 是什么东西呀? daemon 的字面上的意思就是守护神、恶魔?

简单的说,系统为了某些功能必须要提供一些服务 (不论是系统本身还是网络方面),这个服务就称为 service 。 但是 service 的提供总是需要程序的运行吧!否则如何运行呢?所以达成这个 service 的程序我们就称呼他为 daemon ! 举例来说,达成循环型例行性工作排程服务 (service) 的程序为 crond 这个 daemon 啦!这样说比较容易理解了吧!

你不必去区分什么是 daemon 与 service !事实上,你可以将这两者视为相同!因为达成某个服务是需要一支 daemon 在背景中运行, 没有这支 daemon 就不会有 service !

一般来说,当我们以文本模式或图形模式 (非单人维护模式) 完整启动进入 Linux 主机后, 系统已经提供我们很多的服务了!

服务

服务的分类

如果依据 daemon 的启动与管理方式来区分,基本上,可以将 daemon 分为可独立启动的 stand alone , 与透过一支 super daemon 来统一管理的服务这两大类,这两类 daemon 的说明如下:

stand_alone:此 daemon 可以自行单独启动服务

就字面上的意思来说,stand alone 就是『独立的启动』的意思。这种类型的 daemon 可以自行启动而不必透过其他机制的管理; daemon 启动并加载到内存后就一直占用内存与系统资源。

最大的优点就是:因为是一直存在内存内持续的提供服务, 因此对于发生客户端的要求时,stand alone 的 daemon 响应速度较快。常见的 stand alone daemon 有 WWW 的 daemon (httpd)、FTP 的 daemon (vsftpd) 等等。

super daemon: 一支特殊的 daemon 来统一管理

这一种服务的启动方式则是藉由一个统一的 daemon 来负责唤起服务!这个特殊的 daemon 就被称为 super daemon 。 早期的 super daemon 是 inetd 这一个,后来则被 xinetd 所取代了。这种机制比较有趣的地方在于, 当没有客户端的要求时,各项服务都是未启动的情况,等到有来自客户端的要求时, super daemon 才唤醒相对应的服务。当客户端的要求结束后,被唤醒的这个服务也会关闭并释放系统资源。

这种机制的好处是:

(1)由于 super daemon 负责唤醒各项服务,因此 super daemon 可以具有安全控管的机制,就是类似网络防火墙的功能啦!

(2)由于服务在客户端的联机结束后就关闭,因此不会一直占用系统资源。但是缺点是什么呢? 因为有客户端的联机才会唤醒该服务,而该服务加载到内存的时间需要考虑进去,因此服务的反应时间会比较慢一些啦! 常见的 super daemon 所管理的服务例如 telnet 这个玩意儿就是啦! Super daemon.gif

如上所示,Super daemon 是常驻在内存中的, Program 1, 2, 3 则是启动某些服务的程序 (未被启动状态)。当有客户端的要求时, Super daemon 才会去触发相关的程序加载成为 daemon 而存在于内存中,此时,客户端的要求才会被 Super daemon 导向 Daemon 1 去达成联机!当客户端的要求结束时,Daemon 1 将会被移除,图中实线的联机就会中断啰!

窗口类型

那么这两种启动的方式哪一个比较好呢?见仁见智啦!而且还要看该主机的工作负荷与实际的用途说! 例如当你的主机是用来作为 WWW 服务器的,那么 httpd 自然就以 stand alone 的启动方式较佳!事实上,我们常常开玩笑的说明 stand alone 与 super daemon 的情况,可以银行的窗口来作为说明的范例喔!

个别窗口负责单一服务的 stand alone:

在银行里面,假设有一种单一服务的窗口,例如存钱窗口,所以当你需要存钱的时候,直接前往该窗口,就有『专人』为你服务啦! 这就是 stand alone 的情况。

统一窗口负责各种业务的 super daemon:

在银行里面假设还有另外一种复合型态的统一窗口,同时提供转账、资金调度、提款等等的业务,那当你需要其中一项业务的时候, 就需要前往该窗口。但是坐在窗口的这个营业员,拿到你的需求单之后,往后面一丢『喂!那个转账的仁兄!该你的工作了』 那么那个仁兄就开始工作去!然而里头还有资金调度与提款等负责业务的仁兄呢?他们在干嘛?嘿嘿!看看报、喝喝茶啰!

那么这里就会引出另外一个问题啦!假设银行今天的人潮特别的汹涌,所以这个窗口后面除了你之外还有很多的人! 那么想一想,这个窗口是要『一个完成再来下一个』还是『全部都把你们的单据拿来,我全部处理掉』呢?呵呵! 是不是不太一样?基本上,针对这种 super daemon 的处理模式有两种,分别是这样: multi-threaded (多重线程):

就是我们提到的,全部的客户之要求都给他拿来,一次给他交办下去,所以一个服务同时会负责好几个程序。

single-threaded (单个线程):

这个就是目前我们『人类的银行』最常见的方式啦,不论如何,反正一个一个来,第一个没有处理完之前,后面的请排队!嘿嘿! 所以如果 client 的要求突然大增的话,那么这些晚到的 client 可得等上一等!

如上所示,左侧为多重运行的方式, daemon 会一直被触发多支程序来提供不同 client 的服务,所以不论你是第几个登陆者, 都可以享用 daemon 的服务。至于右侧则是单一运行的方式,仅会有一支 daemon 被唤醒,第一个用户达成联机后, 后续想要联机的用户就得要等待,因此她们的联机不会成功的。 另外,需要注意的是,既然银行里头有这两种窗口同时存在,所以啰,在 Linux 系统里面,这两种 daemon 的启动方式也是可以同时存在的啦!也就是说,某些服务可以使用 stand alone 来启动,而有些其他的服务则可以使用 xinetd 这个 super daemon 来管理,大致的情况就是这样啦!瞭乎!

工作形态的类型

如果以 daemon 提供服务的的工作状态来区分,又可以将 daemon 分为两大类,分别是:

signal-control

这种 daemon 是透过讯号来管理的,只要有任何客户端的需求进来,他就会立即启动去处理!例如打印机的服务 (cupsd)。

interval-control

这种 daemon 则主要是『每隔一段时间就主动的去运行某项工作』,所以,你要作的是在配置文件指定服务要进行的时间与工作, 该服务在指定的时间才会去完成工作。我们在第十六章提到的 atd 与 crond 就属于这种类型的 daemon 啦 (每分钟侦测一次配置文件) 另外,如果你对于开发程序很有兴趣的话,那么可以自行查阅一下『 man 3 daemon 』看看系统对于 daemon 的详细说明吧! 。

服务的命名

每一个服务的开发者,当初在开发他们的服务时,都有特别的故事啦!不过,无论如何,这些服务的名称被创建之后,被挂上 Linux 使用时,通常在服务的名称之后会加上一个 d ,例如例行性命令的创建的 at, 与 cron 这两个服务, 他的程序文件名会被取为 atd 与 crond,这个 d 代表的就是 daemon 的意思。

服务的启动方式

提供某个服务的 daemon 虽然只是一支程序而已,但是这支 daemon 的启动还是需要运行档、配置文件、运行环境等等, 举例来说,你可以查阅一下 httpd 这个程序 (man httpd) ,里面可谈到不少的选项与参数呢!此外,为了管理上面的方便, 所以通常 distribution 都会记录每一支 daemon 启动后所取得程序的 PID 在 /var/run/ 这个目录下呢! 还有还有,在启动这些服务之前,你可能也要自行处理一下 daemon 能够顺利运行的环境是否正确等等。鸟哥这里要讲的是, 要启动一支 daemon 考虑的事情很多,并非单纯运行一支程序就够了。

为了解决上面谈到的问题,因此通常 distribution 会给我们一个简单的 shell script 来进行启动的功能。 该 script 可以进行环境的侦测、配置文件的分析、PID 文件的放置,以及相关重要交换文件案的锁住 (lock) 动作, 你只要运行该 script ,上述的动作就一口气连续的进行,最终就能够顺利且简单的启动这个 daemon 啰! 这也是为何我们会希望你可以详细的研究一下第十三章的原因啊。

OK!那么这些 daemon 的启动脚本 (shell script) 放在哪里啊?还有, CentOS 5.x 通常将 daemon 相关的文件放在哪里? 以及某些重要的配置文件又是放置到哪里?基本上是放在这些地方:

/etc/init.d/* :启动脚本放置处

系统上几乎所有的服务启动脚本都放置在这里!事实上这是公认的目录,我们的 CentOS 实际上放置在 /etc/rc.d/init.d/ 啦! 不过还是有配置连结档到 /etc/init.d/ 的!既然这是公认的目录,因此建议您记忆这个目录即可!

/etc/sysconfig/* :各服务的初始化环境配置文件

几乎所有的服务都会将初始化的一些选项配置写入到这个目录下,举例来说,登录档的 syslog 这支 daemon 的初始化配置就写入在 /etc/sysconfig/syslog 这里呢!而网络的配置则写在 /etc/sysconfig/network 这个文件中。 所以,这个目录内的文件也是挺重要的;

/etc/xinetd.conf, /etc/xinetd.d/* :super daemon 配置文件

super daemon 的主要配置文件 (其实是默认值) 为 /etc/xinetd.conf ,不过我们上面就谈到了, super daemon 只是一个统一管理的机制,他所管理的其他 daemon 的配置则写在 /etc/xinetd.d/* 里头喔!

/etc/* :各服务各自的配置文件

第六章就讲过了,大家的配置文件都是放置在 /etc/ 底下的喔!

/var/lib/* :各服务产生的数据库

一些会产生数据的服务都会将他的数据写入到 /var/lib/ 目录中。举例来说,数据库管理系统 MySQL 的数据库默认就是写入 /var/lib/mysql/ 这个目录下啦! /var/run/* :各服务的程序之 PID 记录处

我们在第十七章谈到可以使用讯号 (signal) 来管理程序, 既然 daemon 是程序,所以当然也可以利用 kill 或 killall 来管理啦!不过为了担心管理时影响到其他的程序, 因此 daemon 通常会将自己的 PID 记录一份到 /var/run/ 当中!例如登录文件的 PID 就记录在 /var/run/syslogd.pid 这个文件中。如此一来, /etc/init.d/syslog 就能够简单的管理自己的程序啰。 上面谈到的部分是配置文件,那么 stand alone 与 super daemon 所管理的服务启动方式怎么作呢?

常见服务

  • acpi-support 高级电源管理支持
  • acpid acpi 守护程序.这两个用于电源管理,非常重要
  • apmd acpi 的扩展
  • alsa 声音子系统
  • alsa-utils 声音子系统实用工具
  • cron 任务调度系统,建议开启
  • anacron cron 的子系统,将系统关闭期间的计划任务,在下一次系统运行时执行
  • atd 类似于 cron 的任务调度系统。建议关闭
  • binfmt-support 核心支持其他二进制的文件格式
  • bluez-utiles 蓝牙设备支持
  • bootlogd 启动日志。开启它
  • syslog-ng 系统日志,建议开启
  • klogd 同上,使用一种就可以了
  • sysklogd 系统日志记录器
  • cupsys 打印机子系统
  • dbus 消息总线系统(message bus system)。非常重要
  • dns-clean 使用拨号连接时,清除 dns信息
  • evms 企业卷管理系统
  • fetchm 邮件用户代理守护进程,用于收取邮件
  • gdm gnome 登录管理器
  • gpm 终端中的鼠标支持
  • halt 关闭系统
  • hdparm 调整硬盘的脚本,配置文件为 /etc/hdparm.conf
  • hibernate 系统休眠
  • hotkey-setup 笔记本功能键支持
  • hotplug and hotplug-net 即插即用支持,比较复杂,建议不要动它
  • ifrename 网络接口重命名脚本。如果您有十块网卡,您应该开启它
  • inetd 配置文件为 /etc/inetd.conf
  • linux-restricted-modules-common 受限模块支持。
  • lvm 逻辑卷管理系统支持
  • makedev 创建设备文件,非常重要
  • mdamd 磁盘阵列
  • module-init-tools 从/etc/modules加载扩展模块,建议开启
  • networking 网络支持。按 /etc/network/interfaces 文件预设激活网络,非常重要
  • ntpdate 时间同步服务,建议关闭
  • pcmcia pcmcia 设备支持
  • powernowd 移动 CPU 节能支持
  • ppp 拨号连接
  • ppp-dns 拨号连接的dns服务
  • readahead 预加载库文件
  • reboot 重启系统
  • resolvconf 自动配置 DNS
  • rmnologin 清除 nologin
  • rsync rsync 守护程序
  • sendsigs 在重启和关机期间发送信号
  • single 激活单用户模式
  • sshd ssh服务器
  • sudo 检查 sudo 状态
  • udev 用户空间 dev文件系统(userspace dev filesystem)。重要
  • umountfs 卸载文件系统
  • urandom 随机数生成器
  • usplash 开机画面支持
  • vbesave 显卡 BIOS 配置工具。保存显卡的状态
  • xorg-common 设置 X 服务 ICE socket
  • adjtimex 调整核心时钟的工具
  • dirmngr 证书列表管理工具
  • hwtools irqs 优化工具
  • libpam-devperm 系统崩溃之后,用于修理设备文件许可的守护程序
  • lm-sensors 板载传感器支持
  • mdadm-raid 磁盘陈列管理器
  • screen-cleanup 清除开机屏幕的脚本
  • xinetd 管理其他守护进程的一个 inetd 超级守护程序

注意:/lib/linux-restricted-modules/ 文件夹中的模块为受限模块。例如某些驱动程序,如果您没有使用受限模块,就不需要开启它。

服务管理

chkconfig

chkconfig 是 Linux 中基于命令行的服务管理工具,chkconfig 可以用于启用和禁用系统服务

    语法:chkconfig [--add][--del][--list][系统服务]或
    chkconfig [--level<等级代号>][系统服务][on/off/reset]

    参数: 
    --add 新增所指定的系统服务
    --del 删除所指定的系统服务
    --level 指定该系统服务要在哪个执行等级中开启或关闭
    --list 列出当前可从chkconfig指令管理的所有系统服务和等级代号
    --on/off/reset 在指定的执行登记,开启/关闭/重置该系统服务

linux 将操作环境分为以下7个等级:

0:开机(请不要切换到此等级)

1:单人使用者模式的文字界面

2:多人使用者模式的文字界面,不具有网络档案系统(NFS)功能

3:多人使用者模式的文字界面,具有网络档案系统(NFS)功能

4:某些发行版的linux使用此等级进入x windows system

5:某些发行版的linux使用此等级进入x windows system

6:重新启动

实例: 1.查看在各种不同的执行等级中,各项服务的状况:

     chkconfig --list

2.列出系统服务vsftpd在各个执行等级的启动情况:

     chkconfig --list vsftpd

3.在执行等级3,5时,关闭vsftpd系统服务:

     chkconfig --level 35 vsftpd off

4.在执行等级2,3,5时,开启 vsftpd系统服务:

     chkconfig --level 235 vsftpd on

5.关闭一些自己不需要的服务

如果没有打印机:

     chkconfig --level 235 cups off 

如果没有局域网:

     chkconfig --level 235 smb off

如果不需要远程用户登录的:

     chkconfig --level 235 sshd off

如果不需要定时任务的:

     chkconfig --level 235 crond off

如果不需要添加新硬件的:

     chkconfig --level 235 kudzu off

service

service命令用于对系统服务进行管理,比如启动(start)、停止(stop)、重启(restart)、查看状态(status)等。

    语法: service service name 命令 [选项]

    选项与参数:
    --service name:需要启动的服务名称,需与 /etc/init.d/ 对应
    -status-all 将系统所有的 stand alone 的服务状态通列出来
    --help | -h | 显示帮助信息

实例:

1.查看当前的服务

     service --status-all

2.停止xxx服务

     sudo service httpd stop

3.启动httpd服务:

     sudo service httpd start

4.重起httpd服务

     sudo service httpd restart

来源链接

鸟哥私房菜:认识系统服务 (daemons)

开源世界旅行手册:常见系统服务

chkconfig命令