Linux 系统管理员可以使用 systemd 完成的 3 件令人惊讶的事情

它不仅仅用于加快计算机启动速度。下载我们新的面向 Linux 系统管理员的 systemd 电子书,了解更多技巧。
3 位读者喜欢这个。
Why the operating system matters even more in 2017

互联网档案馆图书图像。由 Opensource.com 修改。CC BY-SA 4.0

当 systemd 最初开始时,有很多关于它的新闻报道,以及它加速启动时间的能力。这个功能具有几乎普遍的吸引力(对于那些不重启的人来说不太重要),所以在很多方面,这仍然是它今天的声誉。虽然 systemd 确实是在启动期间并行启动服务的东西,但它的功能远不止于此。以下是您可能没有意识到 systemd 可以做到但应该利用的三件事。从我们新的可下载电子书systemd 实用指南中获取更多技巧。

1. 简化 Linux ps

如果您曾经使用过 ps 甚至只是 top 命令,那么您就会知道您的计算机在任何给定时刻都在运行数百个进程。有时,这正是您需要的信息类型,以便了解您的计算机或其用户在做什么。其他时候,您真正需要的只是一个总体概述。

systemd-cgtop 命令根据任务已被安排到的 cgroup(控制组)提供计算机负载的简单视图。控制组对于现代 Linux 非常重要,并且本质上是容器和 Kubernetes 底下的支持结构(这反过来又是云扩展方式的原因),但它们也是您家用 PC 上的有用结构。例如,从 systemd-cgtop 的输出中,您可以看到用户进程相对于系统进程的负载

Control Group               Proc+   %CPU   Memory  Input/s Output/s
/                             183    5.0     1.6G       0B     3.0M
user.slice                      4    2.8     1.1G       0B   174.7K
user.slice/user-1000.slice      4    2.8   968.2M       0B   174.7K
system.slice                   65    2.2     1.5G       0B     2.8M

您还可以仅查看您的用户空间进程,或仅查看您的用户空间进程和内核线程。

这绝不是 topps 的替代品,但它是从不同且独特的角度查看您的系统的另一种方式。当运行容器时,它可能至关重要,因为容器使用 cgroup。

2. Linux cron

Cron 是 Linux 的经典组件。当您想要定期安排某事发生时,您可以使用 cron。它可靠且与您的系统集成良好。

问题是,cron 不了解有些计算机会被关闭。如果您有一个计划在午夜运行的 cron 作业,但您每天 23:59 关闭计算机,那么您的 cron 作业永远不会运行。cron 没有工具来检测到有遗漏的夜间作业。

作为对该问题的解答,有出色的 anacron,但它不如 cron 集成。您需要进行大量设置才能使 anacron 运行。

第二个替代方案是 systemd 计时器。与 cron 一样,它已经内置并准备就绪。您必须编写一个单元文件,这肯定比单行 crontab 条目多行,但它也很简单。例如,这是一个单元文件,用于在启动后 30 分钟运行一个假想的备份脚本,但每天只运行一次。这确保了我的计算机得到备份,并防止它尝试每天备份多次。

[Unit]
Description=Backup
Requires=myBackup.service

[Timer]
OnBootSec=30min
OnUnitActiveSec=1d

[Install]
WantedBy=timers.target

当然,您可以干预并提示作业运行。感谢 OnUnitActiveSec 指令,systemd 不会尝试运行您手动激活的作业。

3. 运行 Linux 容器

容器使启动复杂的服务变得非常容易。您可以在几分钟内运行 Mattermost 或 Discourse 服务器。在某些情况下,困难的部分是管理和监控运行后的容器。Podman 使管理它们变得容易,但是用什么来管理 Podman 呢?嗯,您可以使用 systemd

Podman 有一个内置命令来生成单元文件,以便您的容器可以由 systemd 管理和监控

$ podman generate systemd --new --files --name example_pod

然后您所要做的就是启动服务

$ systemctl --user start pod-example_pod.service

与计算机上的任何其他服务一样,systemd 确保您的 pod 无论如何都能运行。它记录问题,您可以使用 journalctl 以及其他基本日志查看这些问题,并且您可以使用 systemd-cgtop 在 cgroup 中监控其活动。

它不是 Kubernetes 平台,但对于您只想在可靠且可预测的基础上提供的一个或两个容器,Podman 和 systemd 是绝佳的组合。

下载 systemd 电子书

systemd 还有很多内容,您可以从作者 David Both 的新免费systemd 实用指南中学习基础知识以及许多有用的实用技巧。

Avatar
我喜欢我的隐私。

2 条评论

Systemd 可能是 Linux 上发生的最糟糕的事情之一。它采用了一个简单易懂的启动过程(无论是 BSD 还是 SystemV),可以用一两页纸完全描述,我可以向学生解释并在一次讲座中让他们掌握它,变成了一个九头蛇般的怪物,当它工作时可以提高启动速度,但在 Ubuntu 升级后,我的一个 Ubuntu Linux 系统无法始终如一地完成启动。我真的希望它永远不会强加给普通的桌面用户,他们通常根本不需要它的所有复杂性,并且如果他们遇到问题就会束手无策。在那个 Ubuntu 系统上,当我访问论坛以查看是否有人知道可能出了什么问题时,普遍的回答是,令人无法接受的是,重新安装系统。这结束了我对 Linux 桌面的使用,尽管我仍然有一个 Linux 防火墙和一个 Linux 系统来支持我的气象站和网络服务。

我从 Fedora 和 SuSE 迁移到 Slackware,以摆脱 systemd。回到 sysv 后,我的生活好多了。

回复 作者:cube1

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.