Linux 系统管理员可以使用 systemd 做 3 件令人惊讶的事情
它不仅仅是为了让您的计算机启动更快。下载我们面向 Linux 系统管理员的新 systemd 电子书,了解更多提示。
当它刚推出时,有很多关于 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
您还可以仅查看用户空间进程,或仅查看用户空间进程和内核线程。
无论如何,这都不是 top
或 ps
的替代品,但它是从不同且独特的角度观察您的系统的附加视图。这在运行容器时至关重要,因为容器使用 cgroup。
2.Linux 定时任务
Cron 是 Linux 的一个经典组件。当你想安排一些事情定期发生时,你可以使用 cron。它非常可靠并且可以很好地集成到您的系统中。
问题是,cron 不明白某些计算机会关闭。如果您计划在午夜执行 cronjob,但您每天 23:59 关闭计算机,则您的 cronjob 永远不会运行。 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 实用指南中学习基础知识以及许多有用且实用的技巧。