北京网站后台培训什么是百度竞价
本文为Ubuntu Linux操作系统- 第十四弹~~
新的一周开始了,时间过得真快,这星期就要冬至啦!!
今天继续Linux系统高级管理板块,主要讲述使用systemd管控系统和服务~
上期回顾:“Linux系统—进程管理详解”
更多Linux 相关内容请点击👉“Linux专栏”~
😎焰之拿瓦,吞噬猛焰的力量!合体!
文章目录
- systemd与系统初始化
- SysVinit初始化方式
- 优点:
- 缺点:
- Upstart初始化方式
- 工作流程
- 特点
- systemd初始化方式
- 特点
- systemd 主要概念和术语
- 核心概念
- 单元(unit)
- 启动目标(Target)和运行级别(Runlevel)
- 依赖关系
- systemd事务
- `systemd`单元文件
- 单元文件与启动目标
- 单元文件格式
- 编辑单元文件
- `target`单元文件
- systemctl命令
- systemctl 语法
- systemd单元管理
- 单元活动状态
- 查看单元
- 查看单元的状态
- 单元状态转换操作
- 列出单元文件(可用单元)
- 查看单元文件状态
- 单元**文件**状态转换操作
- 管理单元依赖关系
- 单元文件的状态
- 编辑单元文件
- systemd管理Linux服务
- 命令大全
- 创建自定义服务
- Linux系统启动过程
- 检测和分析systemd启动过程
- 管理启动目标
systemd与系统初始化
SysVinit初始化方式
Unix
和类Unix
操作系统中使用的传统初始化系统- 主要功能是管理和控制系统启动和关闭过程中的各种服务。
SysVinit
使用运行级别(Runlevel
)来定义系统的不同状态。SysVinit
利用/etc/inittab
文件配置文件,该文件定义了系统的默认运行级别以及其他初始化任务。
优点:
sysVinit
初始化方式原理简单,易于理解; 可以依靠Shell
脚本控制服务启动,服务脚本编写比较容易
缺点:
sysVinit
启动是线性、顺序的,启动过程比较慢
Upstart初始化方式
Upstart
是一种事件驱动的初始化系统,最初由Ubuntu
开发,用来替代传统的SysVinit
Upstart
系统是并行启动服务的机制,并根据系统事件动态地启动或停止服务Job
(工作): Upstart中,Job
是一个工作单元,负责完成特定任务
Job具体分为三种类型:
Task Job
:执行后会在一定时间内完成的任务。
Service Job
:作为后台服务运行的进程。
Abstract Job
:用于内部机制,不直接与用户交互。
Event
(事件): 事件是Upstart中触发Job
执行的关键- 配置文件位于
/etc/init/
目录下,文件扩展名为.conf
,这些文件定义了Job的行为、依赖关系以及触发事件等
工作流程
系统启动时,Upstart会发送一系列事件,这些事件触发相应的Job执行。每个Job在执行过程中可能会触发其他事件,从而形成一种事件驱动的初始化流程
特点
- 所有服务和任务都是由事件驱动的,
Upstart
是并行的。 - 可充分利用计算机多核的特点,大大减少启动所需的时间,提高系统启动速度。
- Ubuntu从6.10版开始支持
Upstart
方式,同时也使用SysVinit
UpStart
主要实现了服务的即插即用。
systemd初始化方式
- 与
Upstart
一样,也是并行启动服务的机制 systemd
系统初始化使用systemd
取代init
,作为系统第一个进程。- 不通过
init
脚本来启动服务,而是采用一种并行启动服务的机制
特点
- 使用
单元文件
替换之前的初始化脚本
。 - 利用启动目标(
Target
)替代运行级别。 - systemd使用类似缓冲池的办法解决服务之间的依赖性;提高了并行启动能力,极大地缩短了系统启动时间。
systemd
与sysVinit
兼容,支持并行化任务,按需启动守护进程。- Ubuntu从15.04版开始支持
systemd
systemd 主要概念和术语
核心概念
单元(unit)
启动目标(Target)和运行级别(Runlevel)
依赖关系
指在单元文件中使用关键字来描述单元之间的依赖关系
systemd事务
-
systemd
能保证事务完整性,旨在保证多个依赖的单元之间没有循环引用。 -
systemd
将单元之间的依赖关系分为两种:required
(强依赖)和wants
(弱依赖)
systemd
单元文件
单元文件与启动目标
- 传统的方案:服务启动脚本对应运行级别
systemd
的方案:单元文件对应启动目标- 将基本的单元文件存放在
/usr/lib/systemd/system/
目录下,不同的启动目标要装载的服务等单元的配置文件则以软链接
方式映射到/etc/systemd/system/
目录下对应的启动目标子目录下,如multi-user.target
装载的单元的配置文件链接到/etc/systemd/system/multi-user.target.wants/
目录下。 - 在
/etc/systemd/system
目录下有多个*.wants
子目录,放在该子目录下的单元文件等同于在[Unit]
节中的Wants
字段,也就是该单元启动时还需启动这些单元
单元文件格式
[Unit]
Description=CUPS Scheduler
Documentation=man:cupsd(8)
[Service]
ExecStart=/usr/sbin/cupsd -I
Type=simple
Restart=always
[Install]
Also=cups.socket cups.path
WantedBy=printer.target
编辑单元文件
步骤:
- 在
/etc/systemd/system/
目录创建单元文件。 - 修改该文件权限,确保只能被
root
用户编辑。 - 在该文件中添加以下配置信息。
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
Environment=APACHE_STARTED_BY_SYSTEMD=true
ExecStart=/usr/local/apache2/bin/apachectl start
ExecStop=/usr/local/apache2/bin/apachectl stop
ExecReload=/usr/local/apache2/bin/apachectl graceful
PrivateTmp=true
Restart=on-abort
[Install]
WantedBy=multi-user.target
- 通知systemd该单元已添加,并开启该服务。
target
单元文件
- 启动目标使用
target
单元文件描述,target
单位文件扩展名是.target
。 target
单元文件的唯一目的是将其他systemd
单元文件通过一连串的依赖关系组织在一起。- 下面以
graphical.target
单元文件举例
graphical.target
单元用于启动一个图形会话,systemd
会启动类似于GNOME
显示管理(gdm.service)、账户服务(accounts-daemon
)这样的服务,并且会激活multi-user.target
单元。
而multi-user.target
又会激活basic.target
,basic.target
又会激活sysinit.target
,从而嵌套组合了多个目标,完成复杂的启动管理。
systemctl命令
systemd
最主要的命令行工具是systemctl
- 负责控制systemd系统和服务管理器
systemctl 语法
systemctl [选项...] 命令 [单元文件名...]
- 不带任何选项和参数运行
systemctl
命令将列出系统已启动(装载)的所有单元 - 执行不带参数的
systemctl status
命令将显示系统当前状态 - systemctl命令的部分选项提供有长格式和短格式,如
--all
和-a
systemd
还可以控制远程系统,管理远程系统主要是通过SSH
协议
systemd单元管理
单元活动状态
高级表示形式:
active
(活动的):表示正在运行inactive
(不活动的):表示没有运行failed
(失败的):表示运行不成功
低级表示形式:
running
:表示一次或多次持续地运行exited
:表示成功完成一次性配置,仅运行一次就正常结束,目前已没有该进程运行waiting
:表示正在运行中,不过还需再等待其他事件才能继续处理dead
:表示没有运行failed
:表示运行失败mounted
:表示成功挂载(文件系统)plugged
:表示已接入(设备)
查看单元
列出所有已装载(Loaded
)的单元
systemctl list-units
- 加上选项
--all
列出所有单元,包括没有找到配置文件的或者运行失败的。 - 加上选项
--failed
列出所有运行失败的单元。 - 加上选项
--state
列出特定状态的单元 - 加上选项
--type
列出特定类型的单元。
查看单元的状态
systemctl status
# 不带参数的将显示系统当前状态
systemctl status [单元文件名...]
#该命令将查看特定单元的状态
单元状态转换操作
start
:启动单元使之运行。
stop
:停止单元运行。
restart
:重新启动单元使之运行。
reload
:重载单元的配置文件而不重启单元。
try-restart
:如果单元正在运行就重启单元。
reload-or-restart
:如有可能重载单元的配置文件,否则,重启单元。
reload-or-try-restart
:如有可能重载单元的配置文件,否则,若正在运行则重启单元。
kill
:杀死单元,以结束单元的运行进程
列出单元文件(可用单元)
systemctl list-unit-files
列出系统中所有已安装的单元文件,即所有可用的单元。- 加上选项
--type
或-t
列出特定类型的可用单元。
查看单元文件状态
systemctl status
显示特定单元的状态时会显示对应的单元文件的状态。systemctl is-enabled
专门用于检查指定的单元文件是否允许开机自动启动
单元文件状态转换操作
enable
为单元文件建立启动连接,设置单元开机自动启动
disable
删除单元文件的启动连接,设置单元开机不自动启动
mask
将单元文件连接到/dev/null
,禁止设置单元开机自动启动。
unmask
允许设置单元开机自动启动
管理单元依赖关系
列出指定单元的所有依赖
systemctl list-dependencies [单元文件名...]
单元文件的状态
enabled
:已建立启动连接,将随系统启动而启动,即开机时自动启动。
disabled
:没建立启动连接,即开机时不会自动启动
static
: 该单元文件没有[Install]
部分(无法执行),只能作为其他单元文件的依赖
masked
:该单元文件被禁止建立启动连接,无论如何都不能启动
generated
:该单元文件是由单元生成器动态生成的。
编辑单元文件
systemctl
提供专门的命令edit
来打开文本编辑器编辑指定的单元文件- 修改配置文件要让
systemd
重新装载配置文件
systemctl daemon-reload
- 重新启动,使修改生效
systemctl restart 单元文件
systemd管理Linux服务
命令大全
- 启动服务
systemctl start 服务名.service
- 停止服务
systemctl stop 服务名.service
- 重启服务
systemctl restart 服务名.service
- 查看服务运行状态
systemctl status 服务名.service
- 重载服务的配置文件而不重启服务
systemctl reload 服务名.service
- 条件式重启服务
systemctl tryrestart 服务名.service
- 重载或重启服务
systemctl reload-or-restart 服务名.service
- 重载或条件式重启
systemctl reload-or-try-restart 服务名.service
- 查看服务是否激活(正在运行)
systemctl is-active 服务名.service
- 查看服务启动是否失败
systemctl is- failed 服务名.service
- 杀死服务
systemctl kill 服务名.service
- 查看所有可用的服务
systemctl list-unit-files --type=service
- 查看某服务是否能够开机自启动
systemctl is-enabled 服务名.service
- 设置服务开机自动启动
systemctl enable 服务名.service
- 禁止服务开机自动启动
systemctl disable 服务名.service
- 禁止某服务设定为开机自启
systemctl mask 服务名.service
- 取消禁止某服务设定为开机自启
systemctl unmask 服务名.service
- 加入自定义服务
步骤:
- 创建相应的单元文件
- 运行命令
systemctl daemon-reload
- 删除服务
步骤:
- 运行命令
systemctl stop 服务名.service
- 删除相应的单元文件
创建自定义服务
服务单元文件的重点是[Service]
节,常用的指令有
Type
:配置单元进程启动时的类型,影响执行和关联选项的功能。
ExecStart
:指定启动单元的命令或者脚本,ExecStartPre
和ExecStartPost节
指定在ExecStart
之前或者之后用户自定义执行的脚本
ExecStop
:指定单元停止时执行的命令或者脚本。
ExecReload
:指定单元重新装载是执行的命令或者脚本。
Restart
:若设置为always
,服务重启时进程会退出,会通过systemctl
命令执行清除并重启的操作。
RemainAfterExit
:若设置为true
,服务会被认为是在活动状态
Linux系统启动过程
BIOS启动—> 启动引导加载程序 —>装载内核—>系统初始化
检测和分析systemd启动过程
- 查看启动耗时,也就是内核空间和用户空间启动时所花的时间
systemd-analyze time
- 查看正在运行的每个单元的启动耗时,并按照时长排序
systemd-analyze blame
检查所有系统单元是否有语法错误
systemd-analyze verify
分析启动时的关键链,查看严重消耗时间的单元列表
systemd-analyze critical-chain
管理启动目标
- 查看当前的启动目标
- 切换到不同的目标
systemctl isolate 目标名.target
- 管理默认启动目标
- 进入系统救援模式和紧急模式。
sudo systemctl rescuesudo systemctl emergency
Ubuntu Linux板块的Linux系统的高级管理内容今天先讲到这里~~~
想要了解更多内容点击练小杰的CSDN!!!
这周继续努力搬砖,明天见,各位大佬!!😄