Linux 学习之认识系统服务(daemon)
jinhucheung opened this issue · comments
1. 什么是daemon
daemon是在后台运行,并提供某项服务的程序,通过以服务名+字符d
来规定daemon的名称
1.1 daemon的主要分类
daemon根据启动与管理方式,可分为独立启动的stand_alone,与通过一个super daemon来统一管理
- stand_alone:此类型daemon可自行独立启动
一直在内存中持续提供服务,对于客服端的请求,响应较快,常见的此类型daemon有提供WWW服务的daemon(httpd)与FTP服务的daemon(vsftpd)等 - super daemon:一个stand_alone的daemon(xinetd,早期是inetd)管理
其内部提供多种服务,当客服端请求时,xinetd才会去唤醒相应的daemon提供服务,请求结束后,此唤醒的daemon也会关闭
daemon根据对请求的处理可分为单进程和多进程
daemon根据提供服务的工作状态可分为singal-control与interval-control
- singal-control:此类daemon通过信号管理
接收到客服端的请求,daemon就会去处理 - interval-control:此类daemon每隔一段时间就主动去执行工作,我们需要在配置文件指定daemon的服务时间与工作内容,如周期例行工作调度的crond
1.2 服务与端口
因为我们主机仅有一个IP,当要提供各种服务时,应该如何处理,我们想要的是用户可访问的是主机上的某项服务,而不是直接开放主机资源出来
如果我们在指定通道上提供一个服务,用户只要访问我们主机上的这个通道,就可以使用服务.那么这个通道(窗口)就是端口.
为了规范服务与端口的对应,所以我们有了协议,约定某服务的指定端口,我们可以查看/etc/services
的内容,里面有各服务的协议端口信息
1.3 daemon相关文件
daemon不同与一般的进程,其启动除了需要执行文件外,还需配置文件,执行环境,运行数据存储等.
一个daemon的相关文件如下:
/etc/init.d/*
: 放置stand_alone的daemon启动脚本
该脚本会进行环境检测,配置文件分析等工作,可以用来管理daemon的状态/etc/sysconfig/*(RedHat) /etc/default/*(Debian)
:服务初始化环境配置文件
存放服务初始化的参数设置的文件,比如网络设置写在/etc/sysconfig/network中/etc/*
:各服务的配置文件/etc/xinetd.conf /etc/xinetd.d/*
:super daemon及所属daemon的配置文件
/etc/xinted.conf是super daemon的配置文件,其是所属daemon最上级的配置文件,当所属daemon的配置文件(/etc/xinetd.d/*)中与xinetd.conf有相同项的配置,参考所属daemon/var/lib/*
: 各服务产生的数据
一些会产生数据的服务将其数据写入/var/lib中,比如Mysql/var/run/*
: 各服务的PID记录
为了能简单地管理各服务的进程,所以daemon会将其PID写入/var/run中
1.4 daemon的启动/关闭
1) stand_alone的/etc/init.d/*的启动/关闭
因为daemon的启动脚本帮我们完成了很多工作(检测环境,查找配置文件等),所以我们直接使用启动脚本来管理daemon
直接输入/etc/init.d/daemon名,会提示此脚本能接受的参数
比如启动/关闭syslog这个服务可以/etc/init.d/syslog start
/etc/init.d/syslog stop
我们也可以用services
来管理daemon,其用法如下:
service [service name] (start|stop|restart...)
service --status-all
//查看目前系统所有stand_alone服务状态
2) super daemon所属daemon的启动/关闭
super daemon所属daemon在/etc/xinetd.d/*中有配置文件,当要启动daemon时,需要将其配置文件中的disable
属性设置no
,在通过/etc/init.d/xinetd重启xinetd,要关闭daemon也是这样做,将disable
设为yes
2. super daemon的配置
2.1 解析super daemon配置文件
super daemon配置文件(/etc/xinetd.conf)与其属的daemon的配置文件(/etc/xinetd.d/*)格式上类似.
xinetd.conf的配置文件形如
defaults
{
instaces = 50 #同一服务的最大同时连接数
per_source = 10 #同一来源的客服端最大连接数
cap = 50 10 #同一秒内的最大连接数为50个,若超过则暂停服务10秒
}
includedir /etc/xinetd.d # 更多设置值在/etc/xinetd.d目录内
而/etc/xinetd.d下的服务配置文件形如
service <service name>
{
属性 操作符 值
}
其中操作符有= += -=
相关的属性与值的说明可以查看 man xinetd.conf
2.2 /etc/hosts管理
我们在xinetd配置文件中有两个值only_from
与no_access
其是用来限制IP访问的,only_from
是允许访问的IP,no_access
是限制访问的IP
除此之外,我们也可以通过/etc/hosts.allow与/etc/hosts.deny文件限制IP访问(hosts.allow优先与hosts.deny)
hosts.allow与hosts.deny的文件格式
<service name> : <IP,domain,hostname>:<atcion>
- : 有allow/deny(允许/限制) 还有其他额外的操作(比如spawn与twist分析数据包,并加以处理)
- 特殊的参数(第一/二个字段):
- ALL : 代表全部的service或IP都接受
- LOCAL:代表本机
- UNKOWN:代表不可解析的IP等
- KNOWN: 可解析的IP等
3. 系统已启动的服务与开机启动服务
3.1 查看系统已启动的服务
1) 查看目前系统正在监听的网络服务
netstat -lnp
2) 查看目前系统的服务状态
service --status-all
3.2 开机启动服务
当我们要设置开机启动的服务时,可以通过chkconfig
或sysv-rc-conf
要了解开机的启动服务,需要知道开机的执行等级,执行等级可以理解成Linux的执行模式,共有[0-6]个等级,0为关机 3为命令模式 5为X window 6为重启
1) 查看系统已设置的开机启动服务
chkconfig --list [服务名]
其会列出各服务的不同等级的开启/关闭状态
2) 设置服务各等级的开机状态
chkconfig --level [0-6] [服务名] [on|off]
3) Linux开机流程说明
- 打开计算机电源,开机读取BIOS并进行主机的自我测试
- 通过BIOS取得第一个可开机设备,读取主引导分区(MBR)取得启动装载程序
- 通过启动装载程序的设置,取得内核并加载内存且检测系统硬件
- 内核主动调用init进程
- init进程开始执行系统初始化(/etc/rc.d/rc.sysinit)
- 依据init的设置进行daemon start(/etc/rc.d/rc[0-6].d/*)
- 加载本机设置(/etc/rc.d/rc.local)