系统管理员喜欢 systemd 的 5 个理由

news/2024/9/16 22:18:39/
导读systemd 的速度和易用性使其成为管理现代 Linux 系统的流行方式。

系统管理员知道,在一台运行着的现代计算机上会发生很多事情:应用程序在后台运行、预定事件等待在特定时间被触发、事件写入日志文件、发送状态报告。在以前,不同的进程可以通过一系列 Unix 工具,来进行有效地管理和监控。然而,现代的计算机运作更为复杂了:本地服务与容器化应用程序一同运行、能够轻松访问云及其运行的集群、实时进程、以及有比以往都多的数据。

拥有统一的管理方法不但是用户想要的,也是忙碌的系统管理员所迫切渴望的。为了完成这项重要的任务,系统守护进程system daemon (systemd) 被开发出来,并迅速被所有主要的 Linux 发行版所采用了。

当然,systemd 并不是管理 Linux 系统的唯一方式,还有许多其他可供选择的初始化系统,包括 sysvinit、OpenRC、runit、s6 和 BusyBox,但 systemd 将 Linux 视为一个统一的数据集,意味着 systemd 能用强大的工具对 Linux 进行一致的操作和查询。对于忙碌的系统管理员和许多用户来说,systemd 的速度和易用性是一个重要的特性。有以下的五个原因。

启动管理

启动 Linux 计算机可能是一件非常罕见的事情。服务器的正常运行时间通常以 年 来计算,而不是月或周。笔记本电脑和台式机可能会频繁地关闭和启动,但更多的时候它们是被挂起或休眠了。无论哪种类型,最近一次开机的时刻都可用于检查一段时间内的计算机健康情况,因为当你在监视系统或诊断问题时,这一时刻能够限制查看的数据量大小,从而让你快速地找到问题所在。

如果你不记得上次启动计算机的时间,你可以使用 systemd 的日志记录工具 journalctl,来列出计算机的所有启动会话:

$ journalctl --list-boots
-42 7fe7c3... Fri 2020-12-04 05:13:59 - Wed 2020-12-16 16:01:23
-41 332e99... Wed 2020-12-16 20:07:39 - Fri 2020-12-18 22:08:13
[...]
-1 e0fe5f... Mon 2021-03-29 20:47:46 - Mon 2021-03-29 21:59:290 37fbe4... Tue 2021-03-30 04:46:13 - Tue 2021-03-30 10:42:08

最近一次启动会话输出在结果列表的底部,因此你可以通过管道将输出传输到 tail,来查看最近一次启动会话。

左侧的数字(在本例中为 42、41、1 和 0)是每个启动会话的索引号。换句话说,如果你要查看某一特定启动会话的日志,你可以使用这个索引号作为参数。

日志检查

查看日志是推断系统信息的一种重要方法。日志提供了计算机运行的大部分事件的历史记录,这些记录都是在没有你直接监督的情况下生成的。通过日志,你可以知道某一服务何时启动、定时任务何时运行、哪些服务在后台运行、哪些事件运行失败等等信息。故障排除的初始步骤是使用 systemd 的 journalctl 来查看日志:

$ journalctl --pager-end

--pager-end 选项(简写为 -e)会从 journalctl 的输出末尾开始查看日志,因此要查看更早发生的日志,你需要向上滚动。

systemd 维护一个错误信息的“目录”,错误信息包含错误记录、可能的解决方案、支持论坛的链接和开发人员文档。这个错误信息的“目录”能为日志事件提供重要的上下文,否则它可能会成为海量日志中的一个令人困惑的信息,或者更糟的是,错误信息可能会完全被忽视。要将错误消息与日志中的解释性文本放在一起输出,你可以使用 --catalog 选项(简写为 -x):

$ journalctl --pager-end --catalog

要进一步限定日志输出,你可以指定要查看哪个启动会话的日志。因为每个启动会话都有索引,所以你可以使用 --boot 选项,来指定某个启动会话,并仅查看该启动会话的日志:

$ journalctl --pager-end --catalog --boot 42

你还可以查看特定 systemd 单元的日志。例如,要解决 SSH 服务的问题,你可以指定 --unit sshd 选项,来仅查看适用于 sshd 守护程序的日志:

$ journalctl --pager-end \--catalog --boot 42 \--unit sshd

服务管理

systemd 的第一个任务就是启动你的计算机,systemd 会迅速、高效且有效地执行这一任务。但 systemd 一直需要管理的任务是服务管理,因为 systemd 需要确保你要运行的服务确实在你的会话期间启动,并继续运行。systemd 的这一功能非常稳健,因为理论上即使是一个崩溃的服务也可以在没有你干预的情况下重新启动。

你可以通过使用 systemctl 命令来让 systemd 管理服务,并能查看定义服务的 单元文件unit file:

$ systemctl cat sshd
# /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.target
Wants=sshd-keygen.target
[Service]
Type=notify
EnvironmentFile=-/etc/crypto-policies/back-ends/opensshserver.config
EnvironmentFile=-/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target

大多数单元文件都在 /usr/lib/systemd/system/ 目录下,但是你也可以用局部更改来修改配置,请使用以下的方式:

$ systemctl edit sshd

你可以通过 is-active 选项,来查看某一服务当前是否处于活动状态:

$ systemctl is-active sshd
active
$ systemctl is-active foo
inactive

同样地,你可以通过 is-failed 选项,来查看某一服务是否运行失败了。

$ systemctl is-failed sshd

使用以下命令,来启动或者停止某一服务:

$ systemctl stop sshd
$ systemctl start sshd

使用以下命令,让某一服务在开机时自启动:

$ systemctl enable sshd

添加 --now 选项,让某一服务在开机时启动并在当前会话中立即启动。

定时器管理

在以前,当你想在 Linux 上自动执行一项任务时,你可以使用的工具是 cron。如今,cron 命令仍能使用,但对于在 Linux 上自动执行一项任务,也有一些其他好用的替代方案。例如,anacron 命令 是一个多功能的、类似于 cron 的系统,它能够运行在停机期间可能会错过的任务。

计划的事件就是在特定时间需要激活的服务。systemd 管理一个名为 定时器 的工具,它类似 cron 的功能。你可以使用以下命令,来列出活动中的定时器:

$ systemctl list-timers
NEXT                          LEFT      
Tue 2021-03-30 12:37:54 NZDT  16min left [...]
Wed 2021-03-31 00:00:00 NZDT  11h left [...]
Wed 2021-03-31 06:42:02 NZDT  18h left [...]
3 timers listed.
Pass --all to see loaded but inactive timers, too.

你可以使用以下命令,来像启用服务一样启用定时器:

$ systemctl enable myMonitor.timer

目标管理

目标target 是 systemd 的最后一个主要组成部分。像服务和定时器一样,目标也是一个单元文件,也可以以相同的方式启动和启用。目标的独特之处在于它们可以将其他单元文件任意分组。例如,你可能希望开机启动到文本控制台界面而不是图形桌面,因此有一个 multi-user 目标。但是,multi-user 目标只是没有包括桌面单元文件的 graphical 目标。

简而言之,目标是一种将服务、定时器甚至其他的目标集合在一起,以表示机器的预期状态的简单方法。

事实上,在 systemd 中,重启、关机或关闭操作只是一个目标而已。

你可以使用 list-unit-files 选项,用 --type 选项将其限制为 target 来列出所有可用的目标:

$ systemctl list-unit-files --type target

使用 systemd 对计算机进行控制管理

现代的 Linux 使用 systemd 进行服务管理和日志检查。从个人的 Linux 系统到企业服务器,systemd 都能提供有效的监控,并且十分易于维护。你越频繁地使用 systemd,systemd 对你而言就会变得越容易预测和直观,你就会明白系统的不同部分是如何相互关联的。

为了更好地熟悉 systemd,请现在就开始使用它吧。请 下载关于 systemd 相关命令的备忘录,你可以在实际使用 systemd 中经常参考这个备忘录,这样你就能更快熟悉使用 systemd 啦!

更多Linux资讯请查看:https://www.linuxprobe.com 


http://www.ppmy.cn/news/8723.html

相关文章

2022年终总结与展望

2022年终总结 自2019年3月13日入驻CSDN,已经三年零九个月了。截至2022年12月31日,CSDN博客已发原创博文112篇,粉丝3616个,访问量超过157万次。 2019年12月31日数据情况: 2020年12月31日数据情况: 2021年1…

JAVA练习8

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、题目1- 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 二、题目2- 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示:这里可以…

数据结构(一)

单链表 // head存储链表头,e[]存储节点的值,ne[]存储节点的next指针,idx表示当前用到了哪个节点 int head, e[N], ne[N], idx; // 初始化 void init() { head -1; idx 0; } // 在链表头插入一个数a void insert(int a) { e[idx] a, ne[i…

mysql事务一致性,原子性,持久性实现以及锁区别

Mysql事务一致性,原子性是如何实现的? 首先是通过锁和mvcc实现了执行过程中的一致性和原子性 其次是在灾备方面通过Redo log实观,Redo log会把事务在执行过程中对数据库所做的所有修改都记录下来,在之后系统崩溃重启后把事务所做的任何修改都…

Faster RCNN网络源码解读(Ⅸ) --- ROIAlign、TwoMLPHead、FastRCNNPredictor部分解析

目录 一、回顾以及本篇博客内容概述 二、代码解析 2.1 FasterRCNNBase类 2.1.1 forward正向传播 2.2 FasterRCNN类 2.2.1 roi_heads定义 2.3 TwoMLPHead类(faster_rcnn_framework.py) 2.4 FastRCNNPredictor类 2.5 RoIHeads类(roi_…

四【Servlet基础】文件配置及环境搭建(重要)

文章目录4.1 Servlet概念4.2 Servlet作用4.3 Servlet开发步骤4.3.1 搭建开发环境4.3.2 创建项目4.3.3 部署Servlet4.3.4 配置Servlet4.3.5 测试运行4.1 Servlet概念 (1)Servlet:Server Applet的简称,是运行在Web服务器端的Java程…

2.0、Linux-基础了解

2.0、开机关机和基本目录介绍 开机登录: 开会机会启动许多程序;他们在Windows叫做 "服务" ,在 Linux 中叫做 "守护进程"(daemon); 开机成功后,他会显示一个文本登录…

【网络】网络发展,网络协议,网络传输流程,地址管理

目录 1.计算机网络背景 1.1网络发展 局域网和广域网 1.2 协议 2.网络协议初识 2.1协议分层 2.2OSI七层模型 2.3 TCP/IP 五层(或四层)模型 网络和操作系统之间的关系 2.4重谈协议 -- 计算机的视角,如何看待协议? 2.5 网…

【MySQL】MySQL存储过程与存储函数实战(MySQL专栏启动)

📫作者简介:小明java问道之路,专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…

第三十六讲:无线AP胖AP模式配置与管理

胖AP(Fat AP)配置一个开放式WLAN非常方便,需要完成的操作包括有线和无线两部分的配置。有线部分即ethernet接口的配置,保证AP能够接入Internet,无线部分的配置包括关联WLAN与VLAN,广播SSID,启用VAP,若无其他DHCP服务器的话&#x…

高并发系统设计 -- 服务限流算法

常见的限流算法 漏桶算法 漏桶法的关键点在于漏桶始终按照固定的速率运行,但是它并不能很好的处理有大量突发请求的场景,毕竟在某些场景下我们可能需要提高系统的处理效率,而不是一味的按照固定速率处理请求。 关于漏桶的实现,u…

计算机网络体系结构

目录常见的计算机网络体系结构计算机网络体系结构分层的必要性计算机网络体系结构分层思想举例计算机网络体系结构中的专用术语常见的计算机网络体系结构 TCP/IP体系结构相当于将OSI体系结构的物理层和数据链路层合并为网络接口层。并去掉了会话层和表示层。 由于TCP/IP在网络…

应用上K8S:Gradle打包

需求 对于spring boot项目我们一般使用Maven或Gradle进行编译打包,也可以借助docker plugin进行镜像打包并push到远程仓库。因此在经过《Docker随时随地玩转变量》一文,我们已经确定了Dockerfile,那么应用上K8S第二步:gradle打包…

D2. RGB Substring (hard version)(尺取)

Problem - 1196D2 - Codeforces 通用领域 医学 计算机 金融经济 你有一个包含n个字符的字符串s,每个字符是R, G或B。 你还得到一个整数k。你的任务是改变初始字符串s中的最小字符数,这样在改变之后,将会有一个长度为k的字符串…

gateway基本配置

目录 1、gateway简介 2、gateway核心概念 3、路由 4、断言 5、过滤器 5.1、过滤器介绍 5.2、内置局部过滤器与使用 5.3、内置全局过滤器 5.4、自定义全局过滤器 5.4.1、黑名单校验 5.4.2、模拟登录校验 6、一个简单的gateway配置实例 1、gateway简介 路由转发 执行…

【android Framework 探究】android 13 aosp 全记录 - 烧录

相关文章:【android Framework 探究】android 13 aosp编译全记录 写在开始 书接上文,编译完后,在二手平台挑挑拣拣最终下手piexl 5,这就开始迫不及待的烧录。 一,解锁bootloader 如果之前已经解锁可以跳过这步 adb r…

SpringBoot整合ShardingJdbc实现数据库水平分表实战

(1)添加Maven依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

表白墙 -- 前后端代码详解

表白墙 -- 前后端代码详解一、前端二、后端实现2.1 需求2.2 创建项目及初始化2.3 实现提交数据 (存档)2.3.1 实现 doPost2.3.2 构造请求 (修改 html 文件)2.3.3 验证2.4 实现获取数据 (读档)2.4.1 实现 doGet2.4.2 构造请求 (修改 html 文件)2.4.3 验证三、JDBC 版本 (MySQL)3.…

Java个人家乡博客源码

概述 个人博客相册家乡主题&#xff0c;用户注册后可以发布关于家乡的特色文章介绍&#xff0c;可以发布照片&#xff0c;相册管理&#xff0c;留言&#xff0c;评论&#xff0c;回复&#xff0c;收藏&#xff0c;关注 演示视频 https://www.bilibili.com/video/BV1iy4y1x7w6…

Python数据分析案例16——水质检测(支持向量机)

本次带来图片分类的案例&#xff0c;水质检测。 数据展示 五种类别的水质&#xff0c;图片形式储存的&#xff1a; 前面1是代表水质的类别标签&#xff0c;后面是样本个数。 图片特征构建 import numpy as np import pandas as pd import matplotlib.pyplot as plt import o…