systemctl 命令

在本系列的前两篇文章中,我探讨了Linux系统启动顺序。 在第一篇文章中 ,我研究了systemd的功能和体系结构以及围绕它替代旧的SystemV init程序和启动脚本的角色的争议。 在第二篇文章中 ,我研究了两个重要的systemd工具systemctl和journalctl,并说明了如何从一个目标切换到另一个目标以及如何更改默认目标。

在第三篇文章中,我将更详细地介绍systemd单元,以及如何使用systemctl命令探索和管理单元。 我还将说明如何停止和禁用单元,以及如何创建新的systemd挂载单元以挂载新文件系统并使它在启动期间启动。

制备

这些实验之一需要sysstat软件包,因此请在继续之前进行安装。 对于Fedora和其他基于Red Hat的发行版,您可以使用以下命令安装sysstat:

 dnf -y install sysstat 

sysstat RPM安装了一些可用于确定问题的统计工具。 一种是系统活动报告 (SAR),它定期记录许多系统性能数据点(默认情况下每10分钟记录一次)。 sysstat软件包安装了两个systemd计时器,而不是在后台作为守护程序运行。 一个计时器每10分钟运行一次以收集数据,另一个计时器每天运行一次以汇总每日数据。 在本文中,我将简要介绍这些计时器,但在以后的文章中将等待解释如何创建计时器。

系统套件

事实是,systemd不仅仅是一个程序。 它是一套大型程序,旨在共同管理正在运行的Linux系统的几乎所有方面。 对systemd的完整论述将自己带一本书。 我们大多数人不需要了解有关systemd的所有组件如何组合在一起的所有详细信息,因此我将重点介绍使您能够管理各种Linux服务以及处理日志文件和日志的程序和组件。

实用结构

systemd的结构(在其可执行文件之外)包含在其许多配置文件中。 尽管这些文件具有不同的名称和标识符扩展名,但它们都被称为“单位”文件。 单位是一切系统的基础。

单位文件是ASCII纯文本文件,系统管理员可以访问该文件并可以创建或修改该文件。 有许多单位文件类型,每种都有自己的手册页。 图1通过文件扩展名列出了其中一些单位文件类型,并简要说明了每种文件类型。

系统单位 描述
.automount The .automount units are used to implement on-demand (i.e., plug and play) and mounting of filesystem units in parallel during startup.
。设备 The .device unit files define hardware and virtual devices that are exposed to the sysadmin in the /dev/directory . Not all devices have unit files; typically, block devices such as hard drives, network devices, and some others have unit files.
。安装 The .mount unit defines a mount point on the Linux filesystem directory structure.
。范围 The .scope unit defines and manages a set of system processes. This unit is not configured using unit files, rather it is created programmatically. Per the systemd.scope man page, “The main purpose of scope units is grouping worker processes of a system service for organization and for managing resources.”
。服务 The .service unit files define processes that are managed by systemd. These include services such as crond cups (Common Unix Printing System), iptables, multiple logical volume management (LVM) services, NetworkManager, and more.
。片 The .slice unit defines a “slice,” which is a conceptual division of system resources that are related to a group of processes. You can think of all system resources as a pie and this subset of resources as a “slice” out of that pie.
。插座 The .socket units define interprocess communication sockets, such as network sockets.
。交换 The .swap units define swap devices or files.
。目标 The .target units define groups of unit files that define startup synchronization points, runlevels, and services. Target units define the services and other units that must be active in order to start successfully.
.timer The .timer unit defines timers that can initiate program execution at specified times.

图1:某些系统单位文件类型

系统控制

在第二篇文章中 ,我研究了systemd的启动功能,在这里,我将进一步探讨其服务管理功能。 systemd提供用于启动和停止服务,将其配置为在系统启动时启动(或不启动)以及监视正在运行的服务的当前状态的systemctl命令。

在以root用户身份进行的终端会话中,确保root的主目录( )是PWD 。 要开始以各种方式查看单元,请列出所有已加载和活动的systemd单元。 systemctl会自动通过较少的页面调度程序将其stdout数据流传递到管道,因此您不必:

[ root @ testvm1 ~ ] # systemctl
UNIT                                       LOAD   ACTIVE SUB       DESCRIPTION              
proc-sys-fs-binfmt_misc.automount          loaded active running   Arbitrary Executable File >
sys-devices-pci0000:00-0000:00: 01.1 -ata7-host6-target6: 0 : 0 - 6 : 0 : 0 : 0 -block-sr0.device loaded a >
sys-devices-pci0000:00-0000:00: 03.0 -net-enp0s3.device loaded active plugged   82540EM Gigabi >
sys-devices-pci0000:00-0000:00: 05.0 -sound-card0.device loaded active plugged   82801AA AC '97>
sys-devices-pci0000:00-0000:00:08.0-net-enp0s8.device loaded active plugged   82540EM Gigabi>
sys-devices-pci0000:00-0000:00:0d.0-ata1-host0-target0:0:0-0:0:0:0-block-sda-sda1.device loa>
sys-devices-pci0000:00-0000:00:0d.0-ata1-host0-target0:0:0-0:0:0:0-block-sda-sda2.device loa>
<snip – removed lots of lines of data from here>

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

206 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use ' systemctl list-unit-files '.


在终端会话中滚动浏览数据时,请查找一些特定的内容。 第一部分列出了设备,例如硬盘驱动器,声卡,网络接口卡和TTY设备。 另一部分显示文件系统安装点。 其他部分包括各种服务以及所有已加载和活动目标的列表。

输出底部的sysstat计时器用于收集和生成SAR的每日系统活动摘要。 SAR是非常有用的解决问题的工具。 (您可以在我的《 使用和管理Linux:第1卷,零至SysAdmin:入门》一书的第13章中了解更多信息。)

在最底部,三行描述了状态的含义(已加载,活动和子状态)。 按q退出寻呼机。

使用以下命令(如上面输出的最后一行所建议)来查看所有已安装的单元,无论它们是否已加载。 我不会在这里重现输出,因为您可以自己滚动浏览。 systemctl程序具有出色的制表符补全功能,可以轻松输入复杂的命令而无需记住所有选项:

 [ root @ testvm1 ~ ] # systemctl list-unit-files 

您会看到某些设备被禁用。 手册页中的systemctl表1列出了该列表,并提供了您可能在此列表中看到的条目的简短说明。 使用-t (类型)选项仅查看计时器单位:

[ root @ testvm1 ~ ] # systemctl list-unit-files -t timer
UNIT FILE                    STATE  
chrony-dnssrv @ .timer         disabled
dnf-makecache.timer          enabled
fstrim.timer                 disabled
logrotate.timer              disabled
logwatch.timer               disabled
mdadm-last-resort @ .timer     static  
mlocate-updatedb.timer       enabled
sysstat-collect.timer        enabled
sysstat-summary.timer        enabled
systemd-tmpfiles-clean.timer static  
unbound-anchor.timer         enabled

您可以使用此替代方法执行相同的操作,该替代方法提供更多详细信息:

[ root @ testvm1 ~ ] # systemctl list-timers
Thu 2020 -04- 16 09:06: 20 EDT  3min 59s left n / a                          n / a           systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Thu 2020 -04- 16 10 :02:01 EDT  59min left    Thu 2020 -04- 16 09:01: 32 EDT  49s ago       dnf-makecache.timer          dnf-makecache.service
Thu 2020 -04- 16 13 :00:00 EDT  3h 57min left n / a                          n / a           sysstat-collect.timer        sysstat-collect.service
Fri 2020 -04- 17 00:00:00 EDT  14h left      Thu 2020 -04- 16 12 : 51 : 37 EDT  3h 49min left mlocate-updatedb.timer       mlocate-updatedb.service
Fri 2020 -04- 17 00:00:00 EDT  14h left      Thu 2020 -04- 16 12 : 51 : 37 EDT  3h 49min left unbound-anchor.timer         unbound-anchor.service
Fri 2020 -04- 17 00:07:00 EDT  15h left      n / a                          n / a           sysstat-summary.timer        sysstat-summary.service

6 timers listed.
Pass --all to see loaded but inactive timers, too.
[ root @ testvm1 ~ ] #


尽管没有选择执行systemctl list-mount的选项,但是您可以列出安装点单元文件:

[ root @ testvm1 ~ ] # systemctl list-unit-files -t mount
UNIT FILE                     STATE    
-.mount                       generated
boot.mount                    generated
dev-hugepages.mount           static  
dev-mqueue.mount              static  
home.mount                    generated
proc-fs-nfsd.mount            static  
proc-sys-fs-binfmt_misc.mount disabled
run-vmblock\x2dfuse.mount     disabled
sys-fs-fuse-connections.mount static  
sys-kernel-config.mount       static  
sys-kernel-debug.mount        static  
tmp.mount                     generated
usr.mount                     generated
var-lib-nfs-rpc_pipefs.mount  static  
var.mount                     generated

15 unit files listed.
[ root @ testvm1 ~ ] #


该数据流中的STATE列很有趣,需要一些解释。 “已生成”状态表明安装单元是使用/ etc / fstab中的信息在启动过程中即时生成的。 生成这些安装单元的程序是/ lib / systemd / system-generators / systemd-fstab-generator,以及生成许多其他单元类型的其他工具。 “静态”挂载单元用于/ proc/ sys之类的文件系统 ,这些文件的文件位于/ usr / lib / systemd / system目录中。

现在,查看服务单元。 此命令将显示主机上安装的所有服务,无论它们是否处于活动状态:

 [ root @ testvm1 ~ ] # systemctl --all -t service 

该服务单元列表的底部显示166作为主机上已加载单元的总数。 您的电话号码可能会有所不同。

单位文件没有文件扩展名(例如.unit )来帮助识别它们,因此可以概括一下,属于systemd的大多数配置文件都是一种或另一种类型的单位文件。 剩下的文件很少是/ etc / systemd中的 .conf文件。

单元文件存储在/ usr / lib / systemd目录及其子目录中,而/ etc / systemd /目录及其子目录包含指向该主机本地配置所必需的单元文件的符号链接。

要对此进行探讨,请使/ etc / systemd为PWD并列出其内容。 然后将/ etc / systemd / system设置为PWD并列出其内容,并列出至少两个当前PWD子目录的内容。

看一下default.target文件,该文件确定系统将引导至哪个运行级别目标。 在本系列的第二篇文章,我解释了如何从GUI(graphical.target)到命令行仅(multi-user.target)目标更改默认目标。 我的测试VM上的default.target文件只是与/usr/lib/systemd/system/graphical.target的符号链接。

花几分钟检查/etc/systemd/system/default.target文件的内容:

[ root @ testvm1 system ] # cat default.target
#  SPDX-License-Identifier: LGPL-2.1+
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[ Unit ]
Description =Graphical Interface
Documentation =man:systemd.special ( 7 )
Requires =multi-user.target
Wants =display-manager.service
Conflicts =rescue.service rescue.target
After =multi-user.target rescue.service rescue.target display-manager.service
AllowIsolate = yes


注意,这需要multi-user.target ; 如果multi-user.target尚未启动和运行graphical.target无法启动。 它还说它“想要” display-manager.service单元。 为了使设备成功启动,无需满足“要求”。 如果无法满足“需求”,则systemd将忽略它,并且其余目标将开始运行。

/ etc / systemd / system中的子目录是各种目标的需求列表。 花几分钟时间浏览/etc/systemd/system/graphical.target.wants目录中的文件及其内容。

systemd.unit手册页包含许多有关单元文件,它们的结构,它们可以分为的部分以及可以使用的选项的良好信息。 它还列出了许多单元类型,所有这些都有自己的手册页。 如果要解释单位文件,这将是一个不错的起点。

服务单位

Fedora安装通常会安装并启用特定主机正常运行不需要的服务。 相反,有时它不包括需要安装,启用和启动的服务。 Linux主机不需要发挥所需功能,但已安装并可能正在运行的服务会带来安全风险,因此至少应停止并禁用它们,最好应将其卸载。

systemctl命令用于管理系统化的单元,包括服务,目标,安装等。 仔细查看服务列表,以识别将永远不会使用的服务:

[ root @ testvm1 ~ ] # systemctl --all -t service
UNIT                           LOAD      ACTIVE SUB        DESCRIPTION                            
< snip >
chronyd.service                loaded    active running    NTP client / server                      
crond.service                  loaded    active running    Command Scheduler                      
cups.service                   loaded    active running    CUPS Scheduler                          
dbus-daemon.service            loaded    active running    D-Bus System Message Bus                
< snip >
● ip6tables.service           not-found inactive dead     ip6tables.service                  
● ipset.service               not-found inactive dead     ipset.service                      
● iptables.service            not-found inactive dead     iptables.service                    
< snip >
firewalld.service              loaded    active   running  firewalld - dynamic firewall daemon
< snip >
● ntpd.service                not-found inactive dead     ntpd.service                        
● ntpdate.service             not-found inactive dead     ntpdate.service                    
pcscd.service                  loaded    active   running  PC / SC Smart Card Daemon

我已经删掉了命令的大部分输出以节省空间。 显示“已加载活跃运行”的服务是显而易见的。 “找不到”服务是systemd知道但未安装在Linux主机上的服务。 如果要运行这些服务,则必须安装包含它们的软件包。

注意pcscd.service单元。 这是PC / SC智能卡守护程序。 它的功能是与智能卡读取器进行通信。 许多Linux主机(包括VM)都不需要此读取器,也不需要加载的服务,也不需要占用内存和CPU资源。 您可以停止并禁用此服务,因此它将不会在下次启动时重新启动。 首先,检查其状态:

[ root @ testvm1 ~ ] # systemctl status pcscd.service
● pcscd.service - PC / SC Smart Card Daemon
Loaded: loaded ( / usr / lib / systemd / system / pcscd.service; indirect; vendor preset: disabled )
Active: active ( running ) since Fri 2019 -05- 10 11 : 28 : 42 EDT; 3 days ago
Docs: man:pcscd ( 8 )
Main PID: 24706 ( pcscd )
Tasks: 6 ( limit: 4694 )
Memory: 1.6M
CGroup: / system.slice / pcscd.service
└─ 24706 / usr / sbin / pcscd --foreground --auto-exit

May 10 11 : 28 : 42 testvm1 systemd [ 1 ] : Started PC / SC Smart Card Daemon.


此数据说明了systemd与SystemV相比提供的附加信息,后者仅报告服务是否正在运行。 请注意,指定.service单元类型是可选的。 现在停止并禁用该服务,然后重新检查其状态:

[ root @ testvm1 ~ ] # systemctl stop pcscd ; systemctl disable pcscd
Warning: Stopping pcscd.service, but it can still be activated by:
pcscd.socket
Removed / etc / systemd / system / sockets.target.wants / pcscd.socket.
[ root @ testvm1 ~ ] # systemctl status pcscd
● pcscd.service - PC / SC Smart Card Daemon
Loaded: loaded ( / usr / lib / systemd / system / pcscd.service; indirect; vendor preset: disabled )
Active: failed ( Result: exit-code ) since Mon 2019 -05- 13 15 : 23 : 15 EDT; 48s ago
Docs: man:pcscd ( 8 )
Main PID: 24706 ( code =exited, status = 1 / FAILURE )

May 10 11 : 28 : 42 testvm1 systemd [ 1 ] : Started PC / SC Smart Card Daemon.
May 13 15 : 23 : 15 testvm1 systemd [ 1 ] : Stopping PC / SC Smart Card Daemon...
May 13 15 : 23 : 15 testvm1 systemd [ 1 ] : pcscd.service: Main process exited, code =exited, status = 1 / FAIL >
May 13 15 : 23 : 15 testvm1 systemd [ 1 ] : pcscd.service: Failed with result 'exit-code' .
May 13 15 : 23 : 15 testvm1 systemd [ 1 ] : Stopped PC / SC Smart Card Daemon.


大多数服务的简短日志条目显示使您不必搜索各种日志文件即可找到此类信息。 检查系统运行级别目标的状态-指定需要“目标”单元类型:

[ root @ testvm1 ~ ] # systemctl status multi-user.target
● multi-user.target - Multi-User System
Loaded: loaded ( / usr / lib / systemd / system / multi-user.target; static; vendor preset: disabled )
Active: active since Thu 2019 -05-09 13 : 27 : 22 EDT; 4 days ago
Docs: man:systemd.special ( 7 )

May 09 13 : 27 : 22 testvm1 systemd [ 1 ] : Reached target Multi-User System.
[ root @ testvm1 ~ ] # systemctl status graphical.target
● graphical.target - Graphical Interface
Loaded: loaded ( / usr / lib / systemd / system / graphical.target; indirect; vendor preset: disabled )
Active: active since Thu 2019 -05-09 13 : 27 : 22 EDT; 4 days ago
Docs: man:systemd.special ( 7 )

May 09 13 : 27 : 22 testvm1 systemd [ 1 ] : Reached target Graphical Interface.
[ root @ testvm1 ~ ] # systemctl status default.target
● graphical.target - Graphical Interface
Loaded: loaded ( / usr / lib / systemd / system / graphical.target; indirect; vendor preset: disabled )
Active: active since Thu 2019 -05-09 13 : 27 : 22 EDT; 4 days ago
Docs: man:systemd.special ( 7 )

May 09 13 : 27 : 22 testvm1 systemd [ 1 ] : Reached target Graphical Interface.


默认目标是图形目标。 可以通过这种方式检查任何单元的状态。

登上老路

挂载单元定义了在指定挂载点上挂载文件系统所需的所有参数。 与使用/ etc / fstab文件系统配置文件相比,systemd可以更灵活地管理装载单元。 尽管如此,systemd仍使用/ etc / fstab文件进行文件系统配置和安装。 systemd使用systemd-fstab-generator工具从fstab文件中的数据创建临时安装单元。

我将创建一个新的文件系统和一个systemd挂载单元来挂载它。 如果您的测试系统上有一些可用的磁盘空间,可以和我一起做。

请注意,在测试系统上,卷组和逻辑卷名称可能不同。 确保使用与您的系统相关的名称。

您将需要创建一个分区或逻辑卷,然后在其上创建一个EXT4文件系统。 为文件系统TestFS添加标签,并为安装点/ TestFS创建目录。

要自己尝试,请首先验证卷组上是否有可用空间。 这是我的VM上的外观,其中在卷组上有一些可用空间来创建新的逻辑卷:

[ root @ testvm1 ~ ] # lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8 : 0    0  120G  0 disk
├─sda1          8 : 1    0    4G  0 part / boot
└─sda2          8 : 2    0  116G  0 part
├─VG01-root 253 : 0    0    5G  0 lvm  /
├─VG01-swap 253 : 1    0    8G  0 lvm  [ SWAP ]
├─VG01-usr  253 : 2    0   30G  0 lvm  / usr
├─VG01-home 253 : 3    0   20G  0 lvm  / home
├─VG01-var  253 : 4    0   20G  0 lvm  / var
└─VG01-tmp  253 : 5    0   10G  0 lvm  / tmp
sr0            11 : 0    1 1024M  0 rom  
[ root @ testvm1 ~ ] # vgs
VG   #PV #LV #SN Attr   VSize    VFree  
VG01   1   6   0 wz--n- < 116.00g < 23.00g

然后在VG01上创建一个名为TestFS的新卷。 它不必很大; 1GB可以。 然后创建一个文件系统,添加文件系统标签,并创建安装点:

[ root @ testvm1 ~ ] # lvcreate -L 1G -n TestFS VG01
Logical volume "TestFS" created.
[ root @ testvm1 ~ ] # mkfs -t ext4 /dev/mapper/VG01-TestFS
mke2fs 1.45.3 ( 14 -Jul- 2019 )
Creating filesystem with 262144 4k blocks and 65536 inodes
Filesystem UUID: 8718fba9-419f- 4915 -ab2d-8edf811b5d23
Superblock backups stored on blocks:
32768 , 98304 , 163840 , 229376

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal ( 8192 blocks ) : done
Writing superblocks and filesystem accounting information: done

[ root @ testvm1 ~ ] # e2label /dev/mapper/VG01-TestFS TestFS
[ root @ testvm1 ~ ] # mkdir /TestFS


现在,挂载新文件系统:

[ root @ testvm1 ~ ] # mount /TestFS/
mount: / TestFS / : can 't find in /etc/fstab.

这将不起作用,因为您在/ etc / fstab中没有条目。 您可以使用设备名称(如在/ dev中显示的那样)和安装点来挂载新的文件系统,即使在/ etc / fstab中没有条目也是如此。 以这种方式进行安装比以前更简单-以前需要文件系统类型作为参数。 现在,mount命令已经足够智能,可以检测文件系统类型并进行相应的安装。

再试一次:

[ root @ testvm1 ~ ] # mount /dev/mapper/VG01-TestFS /TestFS/
[ root @ testvm1 ~ ] # lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8 : 0    0  120G  0 disk
├─sda1            8 : 1    0    4G  0 part / boot
└─sda2            8 : 2    0  116G  0 part
├─VG01-root   253 : 0    0    5G  0 lvm  /
├─VG01-swap   253 : 1    0    8G  0 lvm  [ SWAP ]
├─VG01-usr    253 : 2    0   30G  0 lvm  / usr
├─VG01-home   253 : 3    0   20G  0 lvm  / home
├─VG01-var    253 : 4    0   20G  0 lvm  / var
├─VG01-tmp    253 : 5    0   10G  0 lvm  / tmp
└─VG01-TestFS 253 : 6    0    1G  0 lvm  / TestFS
sr0              11 : 0    1 1024M  0 rom  
[ root @ testvm1 ~ ] #

现在,新文件系统已安装在正确的位置。 列出安装单元文件:

 [ root @ testvm1 ~ ] # systemctl list-unit-files -t mount 

该命令不显示/ TestFS文件系统的文件,因为没有文件。 命令systemctl status TestFS.mount也不显示有关新文件系统的任何信息。 您可以在systemctl status命令中使用通配符来尝试:

[ root @ testvm1 ~ ] # systemctl status *mount
● usr.mount - / usr
Loaded: loaded ( / etc / fstab; generated )
Active: active ( mounted )
Where: / usr
What: / dev / mapper / VG01-usr
Docs: man:fstab ( 5 )
man:systemd-fstab-generator ( 8 )

< SNIP >
● TestFS.mount - / TestFS
Loaded: loaded ( / proc / self / mountinfo )
Active: active ( mounted ) since Fri 2020 -04- 17 16 :02: 26 EDT; 1min 18s ago
Where: / TestFS
What: / dev / mapper / VG01-TestFS

● run-user- 0 .mount - / run / user / 0
Loaded: loaded ( / proc / self / mountinfo )
Active: active ( mounted ) since Thu 2020 -04- 16 08: 52 : 29 EDT; 1 day 5h ago
Where: / run / user / 0
What: tmpfs

● var.mount - / var
Loaded: loaded ( / etc / fstab; generated )
Active: active ( mounted ) since Thu 2020 -04- 16 12 : 51 : 34 EDT; 1 day 1h ago
Where: / var
What: / dev / mapper / VG01-var
Docs: man:fstab ( 5 )
man:systemd-fstab-generator ( 8 )
Tasks: 0 ( limit: 19166 )
Memory: 212.0K
CPU: 5ms
CGroup: / system.slice / var.mount


该命令提供有关系统安装的一些非常有趣的信息,并且会显示新的文件系统。 / var/ usr文件系统被标识为是从/ etc / fstab生成的,而您的新文件系统只是显示它已被加载并在/ proc / self / mountinfo文件中提供了信息文件的位置。

接下来,自动执行此安装。 首先,通过在/ etc / fstab中添加条目以老式的方式进行操作。 稍后,我将向您展示如何以新方式进行操作,这将教您如何创建单元并将其集成到启动序列中。

卸载/ TestFS并将以下行添加到/ etc / fstab文件中:

 / dev / mapper / VG01-TestFS  / TestFS       ext4    defaults        1 2 

现在,使用更简单的mount命令挂载文件系统,然后再次列出挂载单元:

[ root @ testvm1 ~ ] # mount /TestFS
[ root @ testvm1 ~ ] # systemctl status *mount
< SNIP >
● TestFS.mount - / TestFS
Loaded: loaded ( / proc / self / mountinfo )
Active: active ( mounted ) since Fri 2020 -04- 17 16 : 26 : 44 EDT; 1min 14s ago
Where: / TestFS
What: / dev / mapper / VG01-TestFS
< SNIP >

因为文件系统是手动安装的,所以这不会更改此安装的信息。 重新引导并再次运行命令,这次指定TestFS.mount而不是使用通配符。 现在,此装入的结果与在启动时装入的结果一致:

[ root @ testvm1 ~ ] # systemctl status TestFS.mount
● TestFS.mount - / TestFS
Loaded: loaded ( / etc / fstab; generated )
Active: active ( mounted ) since Fri 2020 -04- 17 16 : 30 : 21 EDT; 1min 38s ago
Where: / TestFS
What: / dev / mapper / VG01-TestFS
Docs: man:fstab ( 5 )
man:systemd-fstab-generator ( 8 )
Tasks: 0 ( limit: 19166 )
Memory: 72.0K
CPU: 6ms
CGroup: / system.slice / TestFS.mount

Apr 17 16 : 30 : 21 testvm1 systemd [ 1 ] : Mounting / TestFS...
Apr 17 16 : 30 : 21 testvm1 systemd [ 1 ] : Mounted / TestFS.


创建安装单元

可以使用传统的/ etc / fstab文件或使用systemd单元来配置安装单元。 Fedora使用在安装过程中创建的fstab文件。 但是,systemd用途systemd-fstab的发电机程序翻译的fstab文件到systemd单位在fstab文件的每个条目。 既然您知道可以使用systemd .mount单元文件进行文件系统挂载,请通过为此文件系统创建挂载单元来尝试一下。

首先,卸载/ TestFS 。 编辑/ etc / fstab文件,然后删除或注释掉TestFS行。 现在,在/ etc / systemd / system目录中创建一个名称为TestFS.mount的新文件。 编辑它以包含下面的配置数据。 单元文件名和安装点名称必须相同,否则安装将失败:

# This mount unit is for the TestFS filesystem
# By David Both
# Licensed under GPL V2
# This file should be located in the /etc/systemd/system directory

[ Unit ]
Description =TestFS Mount

[ Mount ]
What = / dev / mapper / VG01-TestFS
Where = / TestFS
Type =ext4
Options =defaults

[ Install ]
WantedBy =multi-user.target


[Unit]部分中的Description行适用于人类,它提供了使用systemctl -t mount列出挂载单元时显示的名称。 该文件[安装]部分中的数据基本上包含与fstab文件中相同的数据。

现在启用安装单元:

[ root @ testvm1 etc ] # systemctl enable TestFS.mount
Created symlink / etc / systemd / system / multi-user.target.wants / TestFS.mount → / etc / systemd / system / TestFS.mount.

这将在/ etc / systemd / system目录中创建符号链接,这将导致此安装单元被安装在所有后续引导中。 该文件系统尚未挂载,因此您必须“启动”它:

 [ root @ testvm1 ~ ] # systemctl start TestFS.mount 

验证是否已安装文件系统:

[ root @ testvm1 ~ ] # systemctl status TestFS.mount
● TestFS.mount - TestFS Mount
Loaded: loaded ( / etc / systemd / system / TestFS.mount; enabled; vendor preset: disabled )
Active: active ( mounted ) since Sat 2020 -04- 18 09: 59 : 53 EDT; 14s ago
Where: / TestFS
What: / dev / mapper / VG01-TestFS
Tasks: 0 ( limit: 19166 )
Memory: 76.0K
CPU: 3ms
CGroup: / system.slice / TestFS.mount

Apr 18 09: 59 : 53 testvm1 systemd [ 1 ] : Mounting TestFS Mount...
Apr 18 09: 59 : 53 testvm1 systemd [ 1 ] : Mounted TestFS Mount.


该实验专门针对为安装创建单元文件,但是它也可以应用于其他类型的单元文件。 细节会有所不同,但是概念是相同的。 是的,我知道在/ etc / fstab文件中添加行比创建挂载单元还容易。 但这是如何创建单位文件的一个很好的示例,因为systemd并非每种单位类型都有生成器。

综上所述

本文更详细地研究了systemd单元,以及如何使用systemctl命令探索和管理单元。 它还显示了如何停止和禁用单元以及如何创建新的systemd挂载单元以挂载新文件系统并使其在启动期间启动。

在本系列的下一篇文章中,我将向您介绍启动过程中遇到的最近问题,并向您展示如何使用systemd规避该问题。

资源资源

互联网上有大量有关systemd的信息,但是很多信息简洁,晦涩甚至是误导。 除了本文提到的资源之外,以下网页还提供了有关systemd启动的更详细和可靠的信息。

  • Fedora项目对systemd有很好的实用指南 。 它具有使用systemd配置,管理和维护Fedora计算机所需的几乎所有知识。
  • Fedora项目还有一个很好的备忘单 ,可以将旧的SystemV命令与可比的systemd命令进行交叉引用。
  • 有关systemd及其创建原因的详细技术信息,请查看Freedesktop.org 对systemd的描述 。
  • Linux.com的“更多系统乐趣”提供了更多高级系统信息和技巧 。

还有systemd的设计师和主要开发者Lennart Poettering撰写的一系列针对Linux sysadmin的技术性文章。 这些文章是在2010年4月至2011年9月之间撰写的,但它们现在和那时一样具有相关性。 关于systemd及其生态系统的许多其他优点都基于这些论文。

  • 重新思考PID 1
  • 系统管理员,第一部分
  • 系统管理员,第二部分
  • 系统管理员,第三部分
  • 管理员专用的systemd,第IV部分
  • 系统管理员,第五部分
  • 管理员专用的systemd,第VI部分
  • 管理员专用系统,第七部分
  • 管理员专用的系统化第八部分
  • 管理员专用的systemd,第IX部分
  • 适用于管理员的systemd,第X部分
  • 管理员专用系统,第十一部分

翻译自: https://opensource.com/article/20/5/systemd-units

systemctl 命令

systemctl 命令_使用systemctl命令管理系统单元相关推荐

  1. 阿里云 mysql 命令_是mysql命令

    mysql帮助命令使用说明 在安装.管理和使用mysql过程中,你是不是需要记忆很多的mysql命令.而且对于新手来说,很不多的命令不知道该如何应用,对于老手来说很多命令时间长了忘记具体的用法. 其实 ...

  2. 阿里云 mysql 命令_有mysql命令

    mysql帮助命令使用说明 在安装.管理和使用mysql过程中,你是不是需要记忆很多的mysql命令.而且对于新手来说,很不多的命令不知道该如何应用,对于老手来说很多命令时间长了忘记具体的用法. 其实 ...

  3. mysql 中有什么命令_常用mysql命令大全

    常用的MySQL命令大全 连接MySQL格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命 ...

  4. 数据库use命令_使用USE命令切换数据库

    数据库use命令 Creating a database in MySQL doesn't select it for use. You have to indicate it with the US ...

  5. cmd编译java命令_使用CMD命令编译执行java命令

    写程序时,有时候需要动态编译执行,经过各种百度及实战,总结一些使用经验. .java文件分为有包名,无包名,又分为有jar包,无jar包,是否指定jre等等. 接下来总结如下: cmd 编译执行jav ...

  6. unix 存储空间不足 无法处理此命令_大数据分析命令行使用教程

    在与数据科学紧密联系的计算机科学领域,像开发人员一样控制计算机是一项非常宝贵的资产.Unix命令行界面(CLI;您还将看到它称为终端或bash,shell等),它使我们能够执行更多操作. 因此,我们推 ...

  7. centos找不到chattr命令_一个骚命令防止你的文件被误删除!

    大家好,我是良许. 文件是我们在电脑里最珍贵的财富,我们经常工作了老半天,然后出来的成果就只是一个文件而已.特别是程序员,我们写了半天的代码,结果也就是一个个代码文件而已. 但是,我们都有过这样惨痛的 ...

  8. c++使用netsh命令_渗透常用命令IPC$内网(一)

       一.IPC$命令 IPC$命令在内网渗透测试中还是经常使用的,也是一款不错的命令.说白了就是一个共享命名管道的资源,它是为了让进城间通信而开放的命名管道,可以通过验证用户名和密码获得相应的权限, ...

  9. mysql执行shell命令_关键Docker命令:使用Docker必须掌握的公认宝典

    读者可以将下面的命令纲要当作成功使用Docker必须掌握的公认宝典--从搜索和构建镜像到创建自己的Dockerfile.我们先看一些简单的命令,然后在此基础上接触更复杂的命令. 7.1.1 docke ...

最新文章

  1. QIIME 2用户文档. 3老司机上路指南(2018.11)
  2. 有赞融资10亿港元 腾讯领投加紧布局产业互联网
  3. 用java画一个网格_用SolidWorks画一个空心挂钩,这种画法稍微有点麻烦
  4. JZOJ 5263. 【NOIP2017模拟8.12A组】分手是祝愿
  5. CVPR2019 大会信息即时跟进(附CVPR2019全部论文下载、GitHub地址)
  6. SpringBoot高级-消息-RabbitMQ安装测试
  7. 吴裕雄--天生自然 高等数学学习:多元函数微分学的几何应用
  8. UI2CODE智能生成代码——组件识别篇
  9. webstorm配置scss自动编译路径
  10. matlab 振动,Matlab振动程序-代码作业
  11. android 设置ios 字体大小设置,iPhone11字体大小怎么调?苹果手机调节字体大小的三种方法...
  12. 基础汇编语言程序设计
  13. 2020年如何写一个现代的JavaScript库
  14. LC3编码开源代码测试
  15. 昆虫大战电子计算机软件,风雨的昆虫大战AI双图版
  16. 怎样把旧电脑数据迁移到新电脑
  17. 01Cadence Allegro做PCB拼版
  18. 分享8个有趣的python小玩具
  19. 同步和互斥的POSXI支持(互斥锁,条件变量,自旋锁)
  20. 饿了么ui自定义el-select小三角图标

热门文章

  1. 观看慕课moocer老师视频Spring Bean装配之Autowire注解说明-8
  2. ListPreference详解与使用
  3. 《POPPIN滑步基本教学》--- 供初学者参考!!!
  4. 下面这些人,你肯定想不到他们也做过程序员
  5. python traceback 丢失_Python异常模块traceback用法实例分析
  6. 用python编写一个掷骰子的小程序
  7. 逆向中共享内存的应用
  8. ABAP 基本数据类型
  9. iPhone更新失败后如何恢复数据
  10. 每年90万吨!新奥股份与切尼尔能源签署LNG长期购销协议