ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第十七章 认识系统服务 (daemons)

2021-02-08 19:31:01  阅读:282  来源: 互联网

标签:第十七章 systemd 服务 启动 认识 daemon systemctl daemons unit


文章目录

什么是daemon与服务(service)

服务是功能的体现。daemon是实现服务的进程。通常不用将二者做详细区分。daemon是一个程序执行后的程序,daemon本身这个程序的命名通常是在服务的名称后加d。这个d是daemon的意思。

早期的system V的 init管理行为中的主要分类(Optional)

system V是Unix的旧版本。当时,用SysV的init脚本程序启动系统服务。系统首先调用的程序是init,再由init去唤醒其他服务。

init的管理机制的特点:
1.对服务的操作有:启动,关闭,重启,状态观察。所有服务启动脚本都在/etc/init.d目录下。命令格式如下:

/etc/init.d/daemon  command #command 可以是start/stop/restart/status。分别对应启动/关闭/重启/状态观察

2.服务启动的方式分为独立启动(stand alone)和被一个总管程序(super daemon)管理。前置服务独立启动,且该服务常驻内存,反应速度快。后者由xinetd/inetd这种总管程序提供socket对应或port对应的管理。用户由请求时,由总管程序唤醒相应的服务程序。缺点是唤醒服务慢。
3.服务的相依性:服务的实现常常需要其他服务的支持。inti再管理员手动处理某服务时,无法协助唤醒支持它的服务。
4.执行等级分类:开机内核调用init,后init据用户自订的使用等级(runlevel)来唤醒不同的服务,以进入不同的操作界面。Linux有7个执行等级(0~6)。1是单人维护模式、3是纯文本模式、5是文字加图形界面模式。

不同执行等级的启动脚本是通过 /etc/rc.d/rc[0-6]/SXXdaemon 链接到 /etc/init.d/daemon ,链接文件名 (SXXdaemon)的意义为:S为启动该服务,XX是数字,为启动的顺序。由于有 SXX 的设置,因此在开机时可以“依序执行”所有需要的服务, 同时也能解决相依服务的问题。这点与管理员自己手动处理不同。
5.制定执行等级默认要启动的服务:若要创建SXXdaemon文件,则不用管理员手动创建链接文件。可执行以下指令:

chkconfig daemon on/off  #默认启动/不启动
chkconfig daemon --list daemon  #观察默认为启动否

6.runlevel的切换:从纯命令行(runlevel 3)切换到图形界面(runlevel 5),执行“init 5”即可关闭原来服务,打开runlevel5所需的服务。

systemd使用的unit分类

从CentOS 7.x后,用init启动脚本来启动其他服务的方式被systemd这个启动服务管理机制代替。systemd的优点如下
1.同时处理所有服务,开机快:init 启动脚本即使对不相依的服务也是“一项一项任务依序启动”的。当os和硬件支持多核心架构时,systemd让所有服务同时启动的方式自然更快。
2.一经要求就回应的 on-demand 启动方式: 整个systemd 仅由一个systemd 服务配合 systemctl 指令来处理,指令不再繁杂。且systemd由于常驻内存,因此任何要求 (on-demand) 都可以立即处理后续的 daemon 启动的任务。
3.服务相依性的自我检查和自动启动:systemd会自动启动服务的支撑服务。
4.依据daemon对服务分类:systemd将每个daemon执行脚本称为一个服务单位(unit),每个unit根据功能归入不同的类型(type)。类别有:系统服务(service)、数据监听与交换的插槽档服务 (socket)、储存系统状态的快照类型(snapshot)、提供不同类似执行等级分类的操作环境 (target),path,timer等类型。(类似独立服务与总管程序的分类)
5.将多个 daemons 集合成为一个群组:systemd 将许多的功能集合成为一个target 项目。1个target==许多daemon。(类似runlevel)
6.向下相容旧有的 init 服务脚本:init 启动脚本也能够通过 systemd 来管理。

init中systemd无法取代的部分:
只有执行等级1,3,5可以在systemd的某些target类型中有对应;
一个管理程序systemctr管理全部的systemd,systemctr不可自订参数,支持的语法有限制(命令形式不够多样);
不是用systemctr启动的服务,systemd无法检测到;
systemd 启动过程中,无法与管理员过 standard input 传入讯息!因此,自行撰写systemd 的启动设置时,务必要取消互动机制(连通过启动时传进的标准输入讯息也要避免!)!!!
systemd 的配置文件所在目录 .

/usr/lib/systemd/system/  #服务的启动脚本设置。类似/etc/init.d目录
/run/systemd/system/ #系统执行过程中所产生的服务脚本,这些脚本的优先序要比/usr/lib/systemd/system/高!
/etc/systemd/system/ #管理员依据主机系统的需求所创建的执行脚本,其实这个目录有点像以前 /etc/rc.d/rc5.d/Sxx 之类的功能!执行优先序又比 /run/systemd/system/ 高
注:/etc/systemd/system/ 存链接文件,决定开机后执行哪些服务。不重要。
/usr/lib/systemd/system/  关系到某个服务启动时的设置。用于查看和修改。

systemd的unit类型分类说明
执行以下命令查看/usr/lib/systemd/system/下文件类型。

ll /lib/systemd/system #查看此配置文件下的详细内容。
可以用cat命令前往此路径,再用ls命令查看。安装的服务和系统已有的服务在此路径下均可以看到。

注意:由于文件夹的合并问题。有些配置文件路径不对。如/usr/lib/systemd/system/实际在/lib/systemd/system/下。详见:Ubuntu下文件夹合并说明
常见的systemd服务类型(可根据服务的后缀名区分)如下:

扩展名主要服务功能
.service一般服务类型 (service unit):主要是系统服务,包括服务器本身所需要的本机服务以及网络服务都是!最常见。
.socket内部程序数据交换的插槽服务 (socket unit):主要是 IPC (Interprocess communication) 的传输讯息插槽档 (socket file) 功能。这种类型的服务通常在监控讯息传递的插槽档,当有通过此插槽档传递讯息来说要链接服务时,就依据当时的状态将该用户的要求传送到对应的daemon, 若 daemon 尚未启动,则启动该 daemon 后再传送用户的要求。
.target执行环境类型 (target unit):其实是一群 unit 的集合。, 选择执行xxx.target 就是执行一堆其他 .service 或/及 .socket 之类的服务
.amount .automount文件系统挂载相关的服务 (automount unit / mount unit):例如来自网络的自动挂载、NFS 文件系统挂载等与文件系统相关性较高的程序管理。
.path侦测特定文件或目录类型 (path unit):某些服务(如打印服务)需要侦测某些特定的目录来提供伫列(队列)服务
.timer循环执行的服务 (timer unit):类似 anacrontab ,不过是由 systemd 主动提供的,比 anacrontab 更加有弹性!

通过systemctl管理服务

systemd 这个启动服务的机制,主要是通过一个名为 systemctl 的指令来处理的!

通过systemctl管理单一服务(service unit)的启动/开机启动与观察状态

服务的启动分为两个阶段:开机的时候设置要不要启动这个服务,现在要不要启动这个服务。二者差别很大。

systemctl [command] unit  #命令格式

注意服务的权限:关闭打开服务有时需要加sudo提高权限。

command可以是:
start :立刻启动后面接的unit
stop :立刻关闭后面接的unit
restart :立刻关闭后启动后面接的unit,亦即执行 stop 再 start 的意思
reload :不关闭后面接的 unit 的情况下,重新载入配置文件,让设置生效
enable :设置下次开机时,后面接的unit会被启动
disable :设置下次开机时,后面接的unit不会被启动
status :目前后面接的这个 unit 的状态,会列出有没有正在执行、开机默认执行否、登录等信息等!
is-active :目前有没有正在运行中
is-enable :开机时有没有默认要启用这个 unit

示例:查看服务状态。
在这里插入图片描述

第二,三行很重要
Loaded:说明开机时这个unit会不会启动。enabled时启动,disabled相反。是紧跟服务名后面的那个。
	daemon的其他默认状态:除eabled/disabled外。有
	static:这个 daemon 不可以自己启动(enable 不可),不过可能会被其他的enabled的的服务来唤醒(相依属性的服务)
	mask:这个daemon 无论如何都无法被启动!因为已经被强制注销(非删除)可通过systemctl unmask 方式改回原本状态
	
Active:当前这个unit的状态是正在执行(running)或没有执行(dead)。
	Active参数说明:
	running:有一个或多个程序正在执行。
	exited:仅执行一次就正常结束的服务,当前系统无任何程序执行(如的 quotaon 功能)。
	waiting:正在执行当中,不过还再等待其他的事件才能继续理
	inactive:这个服务目前没有运行的意思
	
以时间开头的行显示:登录时间,登录主机等信息。

注:不应该使用 kill 的方式来关掉一个正常的服务,否则 systemctl 会无法继续监控该服务的!
注意:系统没有的服务,安装时一定要把名字弄对。如atd.service。和后缀说明服务类型时系统服务,但安装命令为

sudo apt install at #若at写成atd或者atd.service则安装失败。
然而,安装服务cups的命令为
sudo apt install cups

综上安装服务不可加后缀名,有时可能要去d*。

通过systemctl观察系统上所有的服务

插系统上有多少服务命令如下

systemctl [command] [--type=TYPE] [--all] #命令格式
	list-unit-files :依据 /usr/lib/systemd/system/ 内的文件,将所有文件列表说明。
	--type=TYPE:就是之前提到的 unit type,主要有 service, socket, target 等
systemctl  #列出系统上面 启动的unit。按pgup,pgdn换页。
systemctl list-unit-files #列出所有安装的unit
systemctl list-units --type=service --all #列出所有*.service服务。

通过systemctl管理不同的操作环境(target unit)

列出与操作界面关系较大的target项目

systemctl list-units --type=target --all

结果如下
在这里插入图片描述

图片说明:
以下是两个最常用的模式。
graphical.target:就是文字加上图形界面模式,此项目包含了下面的 multi-user.target项目!
multi-user.target:纯文本模式!

获取和修改当前模式

 systemctl [command] [unit.target] #命令格式
选项与参数:
command可以是:
get-default :取得目前的target
set-default :设置后面接的target成为默认的操作模式
isolate :切换到后面接的模式

模式及切换命令

 systemctl poweroff 系统关机
 systemctl reboot 重新开机
 systemctl suspend 进入暂停模式
 systemctl hibernate 进入休眠模式
 systemctl rescue 强制进入救援模式
 systemctl emergency 强制进入紧急救援模式
suspend:暂停模式会将系统的状态数据保存到内存中,然后关闭掉大部分的系统硬件,但未真正关机,唤醒很快。
hibernate:休眠模式则是将系统状态保存到硬盘当中,保存完毕后,将计算机关机。唤醒速度与硬盘性能有关。

标签:第十七章,systemd,服务,启动,认识,daemon,systemctl,daemons,unit
来源: https://blog.csdn.net/qq_40492048/article/details/113751610

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有