31.系统服务

系统为了某些功能必须要提供一些服务,这个服务就称为service。
实现这个 service 的程序我们就称为 daemon。

daemon 的主要分类:
依据 daemon 的启动和管理方式来区分,可以将 daemon 分为可独立启动的 stand alone ,
与通过一个 super daemon 来同一管理的服务。

stand alone:此 daemon 可自行单独启动服务
  这种类型的 daemon 可以自行启动而不必通过其他机制的管理;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 处理模式有2种:

multi-threaded(多线程)single-threaded(单线程)

这里写图片描述


daemon 工作形态的类型:
如果以 daemon 提供的服务的工作状态来区分,又可以将daemon分为2类:

signal-control:这种 daemon通过信号来管理,只要有客户连接的请求过来,
它就会立即启动去处理。如打印机服务(cupsd)

interval-control:这种 daemon 则主要是每隔一段时间就主动去执行某些工作。
所以,你要做的就是在配置文件中指定服务要进行的工作与时间,该服务就在指定的时间去完成。如 atd,crond。

man 3 crond 查看手册

服务与端口的对应
这里写图片描述


daemon 的启动脚本与启动方式

每个 daemon 的启动还是需要执行文件,配置文件,执行环境等。
为了方便管理,通常 distribution 都会记录每一个 daemon 启动后取得的 
PID 并存放在 /var/run/ 这个目录下

这里写图片描述

启动一个 daemon 需要考虑很多事情,并非单纯执行一个进程就够了。
通常 distribution
 会给我们一个简单的shell script 来进行启动的功能。该script可以进行环境的检测、
 配置文件的解析、PID 文件的放置,以及相关重要交换文件的锁住(lock)操作。
 你只要执行该 script ,上述的操作就可以一口气完成,最终就能够顺利且简单的启动这个 daemon。


脚本存放位置:

/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/* : 各服务各自的配置文件


/var/lib/* : 各服务产生的数据库 
  一些会产生数据的服务都会将它的数据写入到 /var/lib 目录中。如 mysql 默认就是写入到 /var/lib/mysql 这个目录下.

这里写图片描述

/var/run/* : 各服务的程序的 PID 记录处:
我们可以通过信号(signal)来管理进程,既然 daemon 是进程,当然也可以通过 kill 或 killall 来管理。
不过为了担心管理时影响到其他的进程,因此 daemon 通常会将自己的 PID 
记录一份到 /var/run/ 中 。例如文件日志的 PID 就记录在 /var/run/syslogd.pid 这个文件中

这里写图片描述


Stand alone 的 /etc/init.d/* 启动:
  几乎系统上所有服务的启动脚本都在 /etc/init.d/ 下面,这里的脚步会去检测环境,
  查找配置文件,加载 distribution 提供的函数功能,判断环境是否可以运行 daemon 等。
  等一切检测完毕后,再以 shell script 的 case ... esac 语法来启动,关闭,查看此 daemon。
  以 /etc/init.d/syslog 这个日志启动脚本来说明:

这里写图片描述

由于系统的环境都已经帮你制作妥当,所以利用 /etc/init.d/* 来启动、关闭、查看,就非常简单。
CentOS 还提供了另外一个可以启动 stand alone 服务的脚本,那就是 service 这个进程。
其实 service 只是一个 script ,它可以分析你执行的 service 后面的参数,
然后根据你的参数再到 /etc/init.d/ 去取得正确的服务来 start 或者 stop 。语法如下:

service [service name] (start | stop | restart |...)
service --status-all
参数:
 service name:即需要启动的服务名称,需与 /etc/init.d/ 对应
 start|... : 即服务要进行的工作
 --status-all : 将系统所有的 stand alone 的服务状态全部列出来

service crond restart
/etc/init.d/crond restart

这里写图片描述

查看 /sbin/service  就知道为什么 了
super daemon 的启动方式:
其实 super daemon 本身也是一个 stand alone 服务。super daemon 要管理后续的其他服务,
它当然要常驻内存。所以 super daemon 与 stand alone 是相同的。但它管理的其他 
daemon 就不是这样做了。必须要在配置文件中设置为启动该 daemon 才行。
配置文件就是 /etc/xinetd.d/* 的所有文件。如何知道 super daemon 所管理的服务是否有启动呢,如下:
grep -i 'disable' /etc/xinetd.d/*

这里写图片描述


解析 super daemon 的配置文件

sudo apt-get install xinetd

默认配置文件 xinetd.conf

这里写图片描述

如果你启动某个 super daemon 管理的服务,但是该服务的配置并没有指定上述的那些项目,
那么该服务的配置值就以上述的默认值为主。
一个服务最多可以有50个同时连接,每秒发起的新连接最多仅能有50条,若超过50条会暂停10秒,
同一个用户来源最多10条连接。

这里写图片描述
这里写图片描述
这里写图片描述

第一行一定有个 service ,至于 <service_name> 则与 /etc/services 有关。因为它可以对照 /etc/services 内的服务名称与端口号来决所要启动的 port 是哪个。相关的参数在两个大括号之间。attribute 是一些 xinetd 的管理参数, assign_op 则是参数的设置方法。 assign_op 的主要设置形式为:
  = : 表示后面的设置参数就是主要
  += : 表示后面的设置为原来的设置参数里面加入新的参数
  -= : 表示后面的设置为原来的设置参数中减去参数

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述


服务的防火墙管理

任何以 xinetd 管理的服务都可以通过 /etc/hosts.allow,/etc/hosts.deny 来设置防火墙。
其实 /etc/hosts.allow,/etc/hosts.deny 也是 /usr/sbin/tcpd 的配置文件。
而这个 /usr/sbin/tcpd 则是用来分析进入系统的 TCP 网络数据包的一个软件。
而 TCP 数据包的头文件主要记录了来源于目的主机的 IP 与 port ,因此通过分析 
TCP 网络数据包并搭配 /etc/hosts.{allow,deny} 的规则比较,就可以决定该链接能否进入我们的主机。
基本是一个服务只要受 xinetd 管理,或者是该服务支持 TCP Wrappers 函数的功能时,
那么该服务的防火墙方面的设置就能够以 /etc/hosts 来处理。
如何查看一个服务的程序有没有支持 TCP Wrapper 呢:
ldd $ (which sshd httpd)
//查看有没有 libwrap.so 这个函数库
//ldd (library dependency discovery)

这里写图片描述

这里写图片描述

两个重点,第一个是要找出你想要管理的那个程序的文件名,第二个才是写下来你想要放行或者阻止的ip或域。
如:
rsync:127.0.0.100 127.0.0.200 : deny
也可以写成2行:
rsync:127.0.0.100 : deny
rsync:127.0.0.200 : deny

这2个文件判断的依据是:以 /etc/hosts.allow 为优先,若分析到 ip 或者网段并没有记录在 /etc/hosts.allow ,则以 /etc/hosts.deny 来判断。

这里写图片描述


系统开启的服务

查看系统启动的服务:
netstat -tnlp  //有哪些开启网络服务

netstat -nlp // 有监听的网络服务
设置开机后立即启动的服务

这里写图片描述
这里写图片描述

系统服务在开机时就可以被启动的地方在第六个步骤,第六个步骤是以不同的执行等级调用不同的服务。
我们在启动Linux 系统时,可以进入不同的模式,这种模式我们称为执行等级(run level)。
不同的执行等级有不同的功能。

chkconfig:管理系统服务默认开机启动与否
chkconfig --list [服务名称]
chkconfig [--level [0123456]] [服务名称] [on|off]
参数: 
  --list:仅将目前的各项服务状态栏显示出来
  --level:设置某个服务在该 level 下启动或者关闭

这里写图片描述
这里写图片描述

ntsysv [--level <levels>] //图形化管理开机启动
chkconfig:设置自己的系统服务

chkconfig [--add|--del] [服务名称]

这里写图片描述


这里写图片描述
这里写图片描述
这里写图片描述


http://book.51cto.com/art/200906/127337.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值