当前位置: 首页 > 科技观察

系统管理员喜欢Systemd的五个原因

时间:2023-03-18 18:00:09 科技观察

系统管理员知道在运行的现代计算机上会发生很多事情:在后台运行的应用程序、在特定时间等待触发的计划事件、写入日志文件的事件、传递状态报告。过去,不同的进程可以通过一系列的Unix工具进行有效的管理和监控。然而,现代计算要复杂得多:本地服务与容器化应用程序一起运行、轻松访问云及其运行的集群、实时进程以及比以往任何时候都多的数据。拥有统一的管理方法不仅是用户想要的,也是忙碌的系统管理员所渴望的。为了完成这项重要任务,系统守护进程(systemd)应运而生,并迅速被所有主要Linux发行版采用。当然,systemd并不是管理Linux系统的唯一方式,还有很多其他可供选择的init系统,包括sysvinit、OpenRC、runit、s6和BusyBox,但systemd将Linux视为一个统一的数据集,这意味着systemd可以始终如一地使用强大的工具操作和查询Linux。systemd的速度和易用性是繁忙的系统管理员和许多用户的重要特性。有以下五个原因。启动管理启动Linux计算机可能是一件非常罕见的事情。服务器正常运行时间通常以年而不是月或周来衡量。笔记本电脑和台式机可能会频繁关闭和启动,但更多时候它们处于暂停或休眠状态。无论是哪种类型,上次开机时间都可以用来检查电脑一段时间内的健康状况,因为当你在监控系统或诊断问题时,这个时间可以限制查看的数据量,让你快速找到问题所在。如果您不记得上次启动计算机的时间,可以使用systemd的日志记录工具journalctl列出计算机的所有启动会话:$journalctl--list-boots-427fe7c3...Fri2020-12-0405:13:59-2020-12-16星期三16:01:23-41332e99...2020-12-16星期三20:07:39-2020-12-18星期五22:08:13[...]-1e0fe5f...Mon2021-03-2920:47:46-Mon2021-03-2921:59:29037fbe4...Tue2021-03-3004:46:13-Tue2021-03-3010:42:08最后启动的会话输出位于结果列表的底部,因此您可以将输出通过管道传输到tail以查看最后启动的会话。左边的数字(本例中为42、41、1和0)是每个引导会话的索引号。换句话说,如果你想查看特定启动会话的日志,你可以使用这个索引号作为参数。日志审查查看日志是推断系统信息的重要方式。日志提供了计算机操作中大多数事件的历史记录,这些事件是在您没有直接监督的情况下生成的。通过日志可以知道一个服务什么时候启动,一个定时任务什么时候运行,有哪些服务在后台运行,哪些事件运行失败等等。排错的第一步是使用systemd的journalctl查看日志:$journalctl--pager-end--pager-endoption(简写为-e)会从journalctl输出的末尾开始查看日志,所以看较早发生的日志,需要向上滚动。systemd维护错误消息的“目录”,其中包含错误日志、可能的解决方案、支持论坛的链接和开发人员文档。这个错误消息的“目录”可以为日志事件提供重要的上下文,否则这些日志事件可能会成为日志海洋中的混乱消息,或者更糟糕的是,错误消息可能会被完全忽略。要在日志中输出错误消息和解释性文本,可以使用--catalog选项(缩写为-x):$journalctl--pager-end--catalog要进一步限制日志输出,可以指定查看启动会话的日志。因为每个引导会话都有一个索引,所以您可以使用--boot选项指定一个引导会话并只查看该引导会话的日志:$journalctl--pager-end--catalog--boot42你还有它是可以查看特定systemd单元的日志。例如,要对SSH服务进行故障排除,您可以指定--unitsshd选项以仅查看适用于sshd守护进程的日志:$journalctl--pager-end\--catalog--boot42\--unitsshd服务管理systemd的第一项工作是启动您的计算机,而systemd可以快速、高效、有效地完成这项工作。但是systemd一直必须管理的一项任务是服务管理,因为systemd需要确保您要运行的服务在您的会话期间实际启动,并继续运行。systemd的这个功能非常强大,因为理论上即使是崩溃的服务也可以在没有您干预的情况下重新启动。可以通过systemctl命令让systemd管理服务,可以查看定义服务的单元文件:$systemctlcatsshd#/usr/lib/systemd/system/sshd.service[Unit]Description=OpenSSHserverdaemonDocumentation=人:sshd(8)人:sshd_config(5)After=network.targetsshd-keygen.targetWants=sshd-keygen.target[Service]Type=notifyEnvironmentFile=-/etc/crypto-policies/back-ends/opensshserver.configEnvironmentFile=-/etc/sysconfig/sshdExecStart=/usr/sbin/sshd-D$OPTIONS$CRYPTO_POLICYExecReload=/bin/kill-HUP$MAINPIDKillMode=processRestart=on-failureRestartSec=42s[Install]WantedBy=multi-user.target大部分单元文件在/usr/lib/systemd/system/目录下,但您也可以修改部分配置,请使用以下方法:$systemctleditsshd您可以使用is-active选项来检查服务是否是当前处于Active状态:$systemctlis-activesshdactive$systemctlis-activefooinactive同样,你可以使用is-failedo检查服务是否失败的选项。$systemctlis-failedsshd使用以下命令启动或停止服务:$systemctlstopsshd$systemctlstartsshd使用以下命令使服务在开机时自动启动:$systemctlenablesshd添加--now选项,有服务在启动时启动并在当前会话中立即启动。计时器管理过去,当您想在Linux上自动执行任务时,您可以使用的工具是cron。今天,cron命令仍然有效,但还有一些其他好的替代方法可以在Linux上自动执行任务。例如,anacron命令是一个多功能的、类似于cron的系统,能够运行停机期间可能错过的任务。预定事件是需要在特定时间激活的服务。systemd管理一个称为计时器的工具,其功能类似于cron。您可以使用以下命令列出活动计时器:$systemctllist-timersNEXTLEFTTue2021-03-3012:37:54NZDT16minleft[...]Wed2021-03-3100:00:00NZDT11hleft[...]Wed2021-03-3106:42:02NZDT18hleft[...]列出了3个计时器。通过--all也可以查看已加载但不活动的计时器。您可以使用以下命令,将计时器作为服务启用:$systemctlenablemyMonitor.timer目标管理目标是systemd的最后一个主要组件。与服务和定时器一样,目标也是一个单元文件,可以用相同的方式启动和启用。目标的独特之处在于它们可以任意分组其他单元文件。例如,您可能希望启动到文本控制台界面而不是图形桌面,从而拥有多用户目标。然而,多用户目标只是图形目标,不包括桌面单元文件。简而言之,目标是一种将服务、计时器甚至其他目标组合在一起以表示机器所需状态的简单方法。事实上,在systemd中,重启、关机或关闭操作只是一个目标。您可以使用list-unit-files选项列出所有可用目标,使用--type选项将其限制为目标:$systemctllist-unit-files--typetarget使用systemd进行计算机控制管理现代Linux使用systemd进行服务管理和日志检查。从个人Linux系统到企业服务器,systemd提供了有效的监控并且非常容易维护。您使用systemd的次数越多,systemd对您来说就越可预测和直观,您就会了解系统的不同部分如何相互关联。要更熟悉systemd,请立即开始使用它。请下载systemd相关命令的备忘录,在实际使用systemd时可以经常参考这份备忘录,让您更快的熟悉使用systemd!