在计算机科技领域,创新不断推动着技术的进步,而 systemd 就是一个以出人意料的方式改善了 Linux 系统的工具。虽然许多人将其仅仅视为用于加快启动时间的工具,但其功能远不止于此。本文将为你揭示三个或许你未曾意识到的 systemd 用法,让你更充分地利用这一强大的工具。
1、Linux 系统监控:更直观的资源查看
无论是使用 ps 命令还是 top 命令,你可能已经注意到你的计算机同时运行着大量进程。有时候,了解每个进程的细节很重要,但有时候你只需要一个整体的概览。
systemd-cgtop 命令提供了一种基于控制组(cgroup)任务排列的简单视图,用以展示计算机的负载情况。控制组在现代 Linux 系统中扮演重要角色,它们是容器和 Kubernetes 等技术的基础支持结构,但同样也在家庭电脑上发挥作用。通过 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,但却为我们提供了一种独特的方式来观察系统状态,尤其在容器化环境中尤为有用。
2、灵活的 Linux 定时任务:systemd 计时器
Cron 是 Linux 中的经典定时任务工具,用于定期执行一些操作。然而,Cron 并不考虑到计算机可能会被关闭的情况。如果你的计划任务定在午夜执行,而你每天在 23:59 关机,那么该任务将永远不会执行。为了解决这个问题,系统中的 Anacron 是一个不错的选择,但它与 Cron 相比集成性较差,设置也较为复杂。
另一个选择是 systemd 计时器,与 Cron 类似,但更为内置且易用。虽然编写一个单元文件相比于简单的 Crontab 条目来说可能复杂一些,但操作起来仍然相对简单。下面是一个例子,展示了如何编写一个在开机 30 分钟后运行的假想备份脚本,并确保每天仅运行一次。
# 备份单元文件
[Unit]
Description=Backup
Requires=myBackup.service
[Timer]
OnBootSec=30min
OnUnitActiveSec=1d
[Install]
WantedBy=timers.target
使用 OnUnitActiveSec 指令,你甚至可以手动触发任务的运行。通过 systemd 计时器,系统能够更灵活地管理定时任务,确保它们按预期运行。
在现代计算环境中,容器技术已经成为一种方便启动复杂服务的方式。你可以在几分钟内启动 Mattermost 或 Discourse 服务器。然而,对于运行后的容器管理和监控可能是个挑战。这时,Podman 可以帮助你,而要更好地管理 Podman,你可以使用 systemd。
Podman 提供了一个内置命令来生成单元文件,从而使得 systemd 可以管理和监控你的容器:
$ podman generate systemd --new --files --name example_pod
随后,你只需使用如下命令启动服务:
$ systemctl --user start pod-example_pod.service
与其他服务一样,systemd 保证你的容器始终在可用状态。你可以使用 journalctl 和其他关键日志来监控容器的运行情况,还可以通过 systemd-cgtop 查看控制组中的活动。
虽然它不同于 Kubernetes 平台,但对于少量容器而言,systemd 与 Podman 的组合为你提供了一个稳定、可靠的服务提供方案。
结语
systemd 是一个功能强大且多才多艺的工具,它远不仅仅是为了加快系统启动时间。从资源监控到灵活的定时任务管理,再到容器化服务的管理,systemd 在许多方面都提供了创新的解决方案。通过深入了解和充分利用 systemd,你将能够更好地管理你的系统并发掘其潜力。