第17章 认识系统服务(daemons)
17.1 什么是daemon与服务(service)
简单地说,系统为了某些功能就必须要提供一些服务(不论是系统本身还是网络方面),这个服务就称为service。但是service的提供总是需要程序的运作吧!否则如何执行呢?所以达成这个service的程序我们就称呼他为daemon啰!举例来说,达成循环型例行性工作排程服务(service)的程序为crond这个daemon啦!
17.1.2 systemd使用的unit分类
从CentOS 7.x之后,RedHat系列的distribution放弃沿用多年的System V开机启动服务的流程,就是前一小节提到的init启动脚本的方法,改用systemd这个启动服务管理机制~那么systemd有什么好处呢?
- 平行处理所有服务,加速开机流程:
- 一经要求就响应的on-demand启动方式
- 服务相依性的自我检查
- 依daemon功能分类
- 将多个daemon集合成为一个群组
- 向下兼容旧有的init服务脚本
- systemd的配置文件放置目录
基本上,systemd将过去所谓的daemon执行脚本通通称为一个服务单位(unit),而每种服务单位依据功能来区分时,就分类为不同的类型(type)。基本的类型有包括系统服务、数据监听与交换的插槽档服务(socket)、储存系统状态的快照类型、提供不同类似执行等级分类的操作环境(target)等等。哇!这么多类型,那设定时会不会很麻烦呢?其实还好,因为配置文件都放置在底下的目录中:- /usr/lib/systemd/system/:每个服务最主要的启动脚本设定,有点类似以前的/etc/init.d底下的文件
- /run/systemd/system/:系统执行过程中所产生的服务脚本,这些脚本的优先序要比/usr/lib/systemd/system/高!
- /etc/systemd/system/:管理员依据主机系统的需求所建立的执行脚本执行优先序又比/run/systemd/system高喔!
也就是说,到底系统开机会不会执行某些服务其实是看/etc/systemd/system/底下的设定,所以该目录底下就是一大堆连结档。而实际执行的systemd启动脚本配置文件,其实都是放置在/usr/lib/systemd/system/底下的喔!因此如果你想要修改某个服务启动的设定,应该要去/usr/lib/systemd/system/底下修改才对!/etc/systemd/system/仅是连结到正确的执行脚本配置文件而已。所以想要看执行脚本设定,应该就得要到/usr/lib/systemd/system/底下去查阅才对!
- systemd的unit类型分类说明
那/usr/lib/systemd/system/以下的数据如何区分上述所谓的不同的类型(type)呢?很简单!看扩展名!举例来说,我们来瞧瞧上一章谈到的vsftpd这个范例的启动脚本设定,还有crond与纯文本模式的multi-user设定:
ll /usr/lib/systemd/system/ | grep -E '(vsftpd|multi|cron)'
扩展名 | 主要服务功能 |
---|---|
.service | 一般服务类型(service unit) |
.socket | 内部程序数据交换的插槽服务(socket unit) |
.target | 执行环境类型(target unit),其实是一群unit的集合 |
.mount .automount | 文件系统挂载相关的服务 |
.path | 侦测特定文件或目录类型(path unit) |
.timer | 循环执行的服务 |
17.2 透过systemctl管理服务
基本上,systemctl这个启动服务的机制,主要是透过一只名为systemctl的指令来处理的!
systemctl [command] [unit]
command主要有:
start : 启动
stop : 关闭
restart : 关闭后再启动
reload: 重载配置文件,让设定生效
enable: 设定下次开机时,后接的unit会被启动
disable: 设定下次开机时,后接的unit不会被启动
status: 列出unit目前的状态
is-active: 目前有没有正在运行中
is-enable: 开机时有没有预设要启用这个unit
17.2.2 透过systemctl观察系统上所有的服务
systemctl [command] [--type=TYPE] [--all]
command:
list-units : 依据unit列出目前有启动的unit。若加上--all都会列出没启动的。
list-unit-files: 依据/usr/lib/systemd/system/内的文件,将所有文件列表说明。
--type=TYPE: 就是之前提到的unit type,主要有service,socket,target等
17.2.3 透过systemctl管理不同的操作环境(target unit)
列出跟操作界面比较有关的target项目:
systemctl list-units --type=target --all
在CentOS 7.1的预设情况下,就有26个target unit耶!而跟操作界面相关性比较高的target主要有底下几个:
- graphical.target: 就是文字加上图形界面,这个界面已经包含了底下的multi-user.target项目!
- multi-user.target:纯文本模式
- rescue.target: 在无法使用root登入的情况下,systemd在开机时会多加一个额外的暂时系统,与你原本的系统无关。这时你可以取得root的权限来维护你的系统。但是这个额外系统,因此可能需要动到chroot的方式来取得你原有的系统喔!
- emergency.target: 紧急处理系统的错误,还是需要使用root登入的情况,在无法使用rescue.target时,可以尝试使用这种模式!
- shutdown.target:关机
- getty.target: 可以设定你需要几个tty之类的,如果想要降低tty的项目,可以修改这个东西的配置文件
systemctl [command] [unit.target]
选项与参数:
command:
get-default: 取得目前的target
set-default: 设定后面接的target成为默认的操作模式
isolate: 切换到后面接的模式
范例:
systemctl isolate multi-user.target
systemctl isolate graphical.target
17.2.4 透过systemctl分析各服务之间的相依性
systemctl list-dependencies [unit] [--reverse]
选项与参数:
--reverse: 反向追踪谁使用这个unit的意思!
17.2.6 关闭网络服务
如何观察网络端口?
netstat -tlunp
systemctl list-units --all | grep avahi-daemon
systemctl stop avahi-daemon.service
systemctl stop avahi-daemon.socket
systemctl disable avahi-daemon.service avahi-daemon.socket
netstat -tlunp
17.3.1 systemctl配置文件相关目录简介
现在我们知道服务的管理是透过systemd,而systemd的配置文件大部分放置于/usr/lib/systemd/system/目录内。但是RedHat官方文件指出,该目录的文件主要是原本软件所提供的设定,建议不要修改!而要修改的位置应该放置于/etc/systemd/system/目录内。
标签:systemd,服务,target,17,认识,system,systemctl,daemons,unit From: https://www.cnblogs.com/evan-whc/p/17592903.html