Linux的systemd怎么使用
今天小编给大家分享一下Linux的systemd怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
systemd 是 Linux 系统的一组基本构建块。它提供了一个以 PID 1 运行的系统和服务管理器,并启动了系统的其余部分。 提供了积极的并行化功能,使用套接字和 D-Bus 激活来启动服务,按需启动守护程序,使用Linux控制组跟踪进程。
systemd 和 SystemV 之间的一个主要差异是管理进程的方式。SystemV 将每个进程视作一个独立的实体。systemd 将相关的进程集中到一个控制组,简写做 cgroup,并将控制组作为一个整体管理系统资源。这意味着资源能够基于应用管理,而不是由组成应用的各个进程来管理。
控制组的控制单元称作切片单元slice unit。切片是允许 systemd 以树状格式控制程序次序,从而简化管理的概念化。
查看控制组我将从一些允许你查看不同类型控制组信息的命令开始。 systemctl status
命令显示一个特定服务的切片信息,包括服务的切片。这个例子展示了 at
守护进程:
[root@testvm1~]#systemctlstatusatd.service●atd.service-DeferredexecutionschedulerLoaded:loaded(/usr/lib/systemd/system/atd.service;enabled;vendorpreset:enabled)Active:active(running)sinceWed2020-09-2312:18:24EDT;1day3hagoDocs:man:atd(8)MainPID:1010(atd)Tasks:1(limit:14760)Memory:440.0KCPU:5msCGroup:/system.slice/atd.service└─1010/usr/sbin/atd-fSep2312:18:24testvm1.both.orgsystemd[1]:StartedDeferredexecutionscheduler.[root@testvm1~]#
这是一个我感到 systemd 比 SystemV 和旧的初始化程序更好用的原因的绝佳示例。这里的信息远比 SystemV 能够提供的丰富。CGroup
项包括的层级结构中,system.slice
是 systemd(PID 1),atd.service
在下一层,是 system.slice
的一部分。CGroup
项的第二行还显示了进程 ID(PID)和启动守护进程使用的命令。
systemctl
命令可以列出多个控制组项,--all
参数列出所有的切片,包括当前没有激活的切片:
[root@testvm1~]#psxawf-eopid,user,cgroup,argsPIDUSERCGROUPCOMMAND2root-[kthreadd]3root-\_[rcu_gp]4root-\_[rcu_par_gp]6root-\_[kworker/0:0H-kblockd]9root-\_[mm_percpu_wq]10root-\_[ksoftirqd/0]11root-\_[rcu_sched]12root-\_[migration/0]13root-\_[cpuhp/0]14root-\_[cpuhp/1]625406root-\_[kworker/3:0-ata_sff]625409root-\_[kworker/u8:0-events_unbound]1root0::/init.scope/usr/lib/systemd/systemd--switched-root--system--deserialize30588root0::/system.slice/systemd-jo/usr/lib/systemd/systemd-journald599root0::/system.slice/systemd-ud/usr/lib/systemd/systemd-udevd741root0::/system.slice/auditd.ser/sbin/auditd743root0::/system.slice/auditd.ser\_/usr/sbin/sedispatch764root0::/system.slice/ModemManag/usr/sbin/ModemManager765root0::/system.slice/NetworkMan/usr/sbin/NetworkManager--no-daemon767root0::/system.slice/irqbalance/usr/sbin/irqbalance--foreground779root0::/system.slice/mcelog.ser/usr/sbin/mcelog--ignorenodev--daemon--foreground781root0::/system.slice/rngd.servi/sbin/rngd-f782root0::/system.slice/rsyslog.se/usr/sbin/rsyslogd-n893root0::/system.slice/sshd.servisshd:/usr/sbin/sshd-D[listener]0of10-100startups1130root0::/user.slice/user-0.slice\_sshd:root[priv]1147root0::/user.slice/user-0.slice|\_sshd:root@pts/01148root0::/user.slice/user-0.slice|\_-bash1321root0::/user.slice/user-0.slice|\_screen1322root0::/user.slice/user-0.slice|\_SCREEN1323root0::/user.slice/user-0.slice|\_/bin/bash498801root0::/user.slice/user-0.slice||\_mansystemd.resource-control498813root0::/user.slice/user-0.slice||\_less1351root0::/user.slice/user-0.slice|\_/bin/bash123293root0::/user.slice/user-0.slice||\_mansystemd.slice123305root0::/user.slice/user-0.slice||\_less1380root0::/user.slice/user-0.slice|\_/bin/bash625412root0::/user.slice/user-0.slice||\_psxawf-eopid,user,cgroup,args625413root0::/user.slice/user-0.slice||\_less246795root0::/user.slice/user-0.slice|\_/bin/bash625338root0::/user.slice/user-0.slice|\_/usr/bin/mc-P/var/tmp/mc-root/mc.pwd.246795625340root0::/user.slice/user-0.slice|\_bash-rcfile.bashrc1218root0::/user.slice/user-1000.sl\_sshd:dboth[priv]1233dboth0::/user.slice/user-1000.sl\_sshd:dboth@pts/11235dboth0::/user.slice/user-1000.sl\_-bash1010root0::/system.slice/atd.servic/usr/sbin/atd-f1011root0::/system.slice/crond.serv/usr/sbin/crond-n1098root0::/system.slice/lxdm.servi/usr/sbin/lxdm-binary1106root0::/system.slice/lxdm.servi\_/usr/libexec/Xorg-backgroundnone:0vt01-nolistentcp-novtswitch-auth/var/run/lxdm/lxdm-:0.auth370621root0::/user.slice/user-1000.sl\_/usr/libexec/lxdm-session370631dboth0::/user.slice/user-1000.sl\_xfce4-session370841dboth0::/user.slice/user-1000.sl\_/usr/bin/ssh-agent/bin/sh-cexec-lbash-c"/usr/bin/startxfce4"370911dboth0::/user.slice/user-1000.sl\_xfwm4--display:0.0--sm-client-id2dead44ab-0b4d-4101-bca4-e6771f4a8ac2370930dboth0::/user.slice/user-1000.sl\_xfce4-panel--display:0.0--sm-client-id2ce38b8ef-86fd-4189-ace5-deec1d0e0952370942dboth0::/user.slice/user-1000.sl|\_/usr/lib64/xfce4/panel/wrapper-2.0/usr/lib64/xfce4/panel/plugins/libsystray.so623068680systrayNotificationAreaAreawherenotificationiconsappear370943dboth0::/user.slice/user-1000.sl|\_/usr/lib64/xfce4/panel/wrapper-2.0/usr/lib64/xfce4/panel/plugins/libpulseaudio-plugin.so823068681pulseaudioPulseAudioPluginAdjusttheaudiovolumeofthePulseAudiosoundsystem370944dboth0::/user.slice/user-1000.sl|\_/usr/lib64/xfce4/panel/wrapper-2.0/usr/lib64/xfce4/panel/plugins/libxfce4powermanager.so923068682power-manager-pluginPowerManagerPluginDisplaythebatterylevelsofyourdevicesandcontrolthebrightnessofyourdisplay370945dboth0::/user.slice/user-1000.sl|\_/usr/lib64/xfce4/panel/wrapper-2.0/usr/lib64/xfce4/panel/plugins/libnotification-plugin.so1023068683notification-pluginNotificationPluginNotificationpluginfortheXfcepanel370948dboth0::/user.slice/user-1000.sl|\_/usr/lib64/xfce4/panel/wrapper-2.0/usr/lib64/xfce4/panel/plugins/libactions.so1423068684actionsActionButtonsLogout,lockorothersystemactions370934dboth0::/user.slice/user-1000.sl\_Thunar--sm-client-id2cfc809d8-4e1d-497a-a5c5-6e4fa509c3fb--daemon370939dboth0::/user.slice/user-1000.sl\_xfdesktop--display:0.0--sm-client-id299be0608-4dca-4055-b4d6-55ec6e73a324370962dboth0::/user.slice/user-1000.sl\_nm-applet
关于这个数据,第一个需要注意的是数据显示了 UID 0(root)和 UID 1000 的用户切片,UID 1000 是我登录的用户。这里列出了组成每个切片的切片部分,而不是服务。还说明了每个用户登录时都会为其创建一个切片,这为将一个用户的所有任务作为单个控制组项进行管理提供了一种方式。
探索控制组的层次结构目前为止一切顺利,但是控制组是分层的,所有的服务单元作为其中一个控制组的成员运行。要查看这个层次结构很简单,使用一个旧命令和 systemd 的一个新命令即可。
ps
命令可以用于映射进程的和其所处的控制组层次。注意使用 ps
命令时需要指明想要的数据列。我大幅削减了下面命令的输出数量,但是试图保留足够的数据,以便你能够对自己系统上的输出有所感受:
[root@testvm1~]#systemctl-tslice--allUNITLOADACTIVESUBDESCRIPTION-.sliceloadedactiveactiveRootSlicesystem-getty.sliceloadedactiveactivesystem-getty.slicesystem-lvm2\x2dpvscan.sliceloadedactiveactivesystem-lvm2\x2dpvscan.slicesystem-modprobe.sliceloadedactiveactivesystem-modprobe.slicesystem-sshd\x2dkeygen.sliceloadedactiveactivesystem-sshd\x2dkeygen.slicesystem-systemd\x2dcoredump.sliceloadedinactivedeadsystem-systemd\x2dcoredump.slicesystem-systemd\x2dfsck.sliceloadedactiveactivesystem-systemd\x2dfsck.slicesystem.sliceloadedactiveactiveSystemSliceuser-0.sliceloadedactiveactiveUserSliceofUID0user-1000.sliceloadedactiveactiveUserSliceofUID1000user.sliceloadedactiveactiveUserandSessionSliceLOAD=Reflectswhethertheunitdefinitionwasproperlyloaded.ACTIVE=Thehigh-levelunitactivationstate,i.e.generalizationofSUB.SUB=Thelow-levelunitactivationstate,valuesdependonunittype.11loadedunitslisted.Toshowallinstalledunitfilesuse'systemctllist-unit-files'.[root@testvm1~]#
你可以使用 systemd-cgls
命令查看整个层次结构,这个命令不需要任何的复杂参数,更加简单。
我也大幅缩短了这个树状结构,但是保留了足够多的输出,以便你能够了解在自己的系统上执行这个命令时应该看到的数据总量和条目类型。我在我的一个虚拟机上执行了这个命令,输出大概有 200 行;我的主要工作站的输出大概有 250 行。
[root@testvm1~]#systemd-cglsControlgroup/:-.slice├─user.slice│├─user-0.slice││├─session-1.scope│││├─1130sshd:root[priv]│││├─1147sshd:root@pts/0│││├─1148-bash│││├─1321screen│││├─1322SCREEN│││├─1323/bin/bash│││├─1351/bin/bash│││├─1380/bin/bash│││├─123293mansystemd.slice│││├─123305less│││├─246795/bin/bash│││├─371371mansystemd-cgls│││├─371383less│││├─371469systemd-cgls│││└─371470less││└─user@0.service…││├─dbus-broker.service│││├─1170/usr/bin/dbus-broker-launch--scopeuser│││└─1171dbus-broker--log4--controller12--machine-id3bccd1140fca488187f8a1439c832f07--max-bytes100000000000000--max-fds25000000000000--max->││├─gvfs-daemon.service│││└─1173/usr/libexec/gvfsd││└─init.scope││├─1137/usr/lib/systemd/systemd--user││└─1138(sd-pam)│└─user-1000.slice│├─user@1000.service…││├─dbus\x2d:1.2\x2dorg.xfce.Xfconf.slice│││└─dbus-:1.2-org.xfce.Xfconf@0.service│││└─370748/usr/lib64/xfce4/xfconf/xfconfd││├─dbus\x2d:1.2\x2dca.desrt.dconf.slice│││└─dbus-:1.2-ca.desrt.dconf@0.service│││└─371262/usr/libexec/dconf-service││├─dbus-broker.service│││├─1260/usr/bin/dbus-broker-launch--scopeuser│││└─1261dbus-broker--log4--controller11--machine-id││└─gvfs-mtp-volume-monitor.service││└─370987/usr/libexec/gvfs-mtp-volume-monitor│├─session-3.scope││├─1218sshd:dboth[priv]││├─1233sshd:dboth@pts/1││└─1235-bash│└─session-7.scope│├─370621/usr/libexec/lxdm-session│├─370631xfce4-session│├─370805/usr/bin/VBoxClient--clipboard│├─370806/usr/bin/VBoxClient--clipboard│├─370817/usr/bin/VBoxClient--seamless│├─370818/usr/bin/VBoxClient--seamless│├─370824/usr/bin/VBoxClient--draganddrop│├─370825/usr/bin/VBoxClient--draganddrop│├─370841/usr/bin/ssh-agent/bin/sh-cexec-lbash-c"/usr/bin/startxfce4"│├─370910/bin/gpg-agent--sh--daemon--write-env-file/home/dboth/.cache/gpg-agent-info│├─370911xfwm4--display:0.0--sm-client-id2dead44ab-0b4d-4101-bca4-e6771f4a8ac2│├─370923xfsettingsd--display:0.0--sm-client-id261b4a437-3029-461c-9551-68c2c42f4fef│├─370930xfce4-panel--display:0.0--sm-client-id2ce38b8ef-86fd-4189-ace5-deec1d0e0952│├─370934Thunar--sm-client-id2cfc809d8-4e1d-497a-a5c5-6e4fa509c3fb--daemon│├─370939xfdesktop--display:0.0--sm-client-id299be0608-4dca-4055-b4d6-55ec6e73a324└─system.slice├─rngd.service│└─1650/sbin/rngd-f├─irqbalance.service│└─1631/usr/sbin/irqbalance--foreground├─fprintd.service│└─303383/usr/libexec/fprintd├─systemd-udevd.service│└─956/usr/lib/systemd/systemd-udevd├─systemd-journald.service│└─588/usr/lib/systemd/systemd-journald├─atd.service│└─1010/usr/sbin/atd-f├─system-dbus\x2d:1.10\x2dorg.freedesktop.problems.slice│└─dbus-:1.10-org.freedesktop.problems@0.service│└─371197/usr/sbin/abrt-dbus-t133├─sshd.service│└─893sshd:/usr/sbin/sshd-D[listener]0of10-100startups├─vboxservice.service│└─802/usr/sbin/VBoxService-f├─crond.service│└─1011/usr/sbin/crond-n├─NetworkManager.service│└─765/usr/sbin/NetworkManager--no-daemon├─switcheroo-control.service│└─787/usr/libexec/switcheroo-control
这个树状视图显示了所有的用户和系统切片,以及每个控制组内正在运行的服务和程序。注意叫作 scope
(范围)的单元,它将相关的程序组成一个管理单元,在上面列出的结果中就是 user-1000.slice
。user-1000.slice/session-7.scope
控制组包含了 GUI 桌面程序层次结构,以 LXDM 显示管理器会话和其所有的子任务开始,包括像 Bash 命令行解释器和 Thunar GUI 文件管理器之类的程序。
配置文件中不定义范围单元,而是作为启动相关程序组的结果程序化生成的。范围单元不创建或启动作为控制组的组成部分运行的进程。范围内的所有进程都是平等的,没有内部的层次结构。一个范围的生命周期在第一个进程创建时开始,在最后一个进程销毁时结束。
在你的桌面打开多个窗口,比如终端模拟器、LibreOffice、或者任何你想打开的,然后切换到一个可用的虚拟控制台,启动类似 top
或 Midnight Commander 的程序。在主机运行 systemd-cgls
命令,留意整体的层次结构和范围单元。
systemd-cgls
命令提供的控制组层次结构表示(以及组成控制组单元的细节),比我见过的其他任何指令都要完整。和 ps
命令提供的输出相比,我喜欢 systemd-cgls
命令更简洁的树形表示。
以上就是“Linux的systemd怎么使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。