CentOS 7上的系统管理之:Systemd和systemctl

参考资料:html

Chapter 10. Managing Services with systemd Red Hat Enterprise Linux 7 | Red Hat Customer Portallinux

systemd - Wikipediashell

man手册:systemd(1)和systemctl(1)apache

IBM developer works上,刘明老师关于CentOS 5/6/7的init系统的介绍bash

简介

早期的CentOS 5系统上,使用的init系统是SysV init。这套系统运行稳定,使用shell脚本的形式,串行地一个个启动进程,当前一个进程启动完毕后,再启动后一个。这种方式带来的缺点是:服务器

  • 计算机的启动速度很慢,后面的进程必须等待前面的进程依次串行地启动完毕方可启动。
  • 有的服务可能在启动后很长的一段时间或者几乎不会使用到,例如服务器中的打印服务。

发展到CentOS 6的时候,init系统换成了Upstart,这个系统有效的解决了上述的缺点,实现了并行启动和按需启动。网络

而到了CentOS 7的时候,则出现了Systemd这套init系统,它更加完善了并行启动和按需启动,使得启动的速度更上一层楼。这里的按需启动,指的是某个服务被设置为开机启动,当开机时该服务并无真正的启动,只是注册好了socket占用,等待第一次有请求进来的时候,Systemd悬挂该请求而后启动服务,服务启动完毕后就恢复该请求,从而实现按需启动,这种方式也变相加速了系统的启动速度。并发

Systemd不只仅是一个服务,还能够用于管理系统自身的方方面面,例如日志、相似crond的任务调度程序(timer)、电源管理等等。app

Systemd支持向后兼容(backward compatible)SysV init的脚本等其余的诸多特性,使得其目前在慢慢成为Linux发行版的一种标准,这是一件好事。运维

这篇文章所能阐述的也只是Systemd的皮毛而已。主要描述了运维人员在平常使用中应该掌握的systemctl命令,以及如何阅读unit文件以及寻找帮助。

Unit

在Systemd中使用配置文件来进行管理,这些配置文件叫作unit。unit有许许多多的类型,以下。

Unit 类型 文件扩展名 描述
Service unit .service 用于管理系统的服务unit,最经常使用,通常由所安装的服务所提供(httpd、MySQL等)
Target unit .target target unit表示的是指望系统运行于哪一个状态下,用户的目标是什么。好比运行于支持图形显示的状态下,那么它除了能够提供CLI的shell界面之外,还须要额外启用许多服务等组件用于支持图形界面,这些组件也是一个个的unit,因此target就是多个unit的集合(这些unit之间还有前后和依赖关系)。所以,target就是用来模拟之前的运行级别(runlevel)的概念。
Automount unit .automount 文件系统自动挂载点。
Device unit .device 一个被内核所识别的设备文件。
Mount unit .mount 一个文件系统的挂载点。
Path unit .path 文件系统中的一个文件或目录。
Scope unit .scope 一个外部建立的进程。
Slice unit .slice 一组用于管理系统进程的分层组织的单元。
Snapshot unit .snapshop Systemd管理器所保存的一个状态,所以称之为快照。
Socket unit .socket 一个进程间通讯(IPC)socket。
Swap unit .swap 一个swap设备或者swap文件。

Timer unit

.timer

一个Systemd timer。

Unit配置文件

unit文件存在于三个位置:

  • /usr/lib/systemd/system/:软件程序包所提供的unit文件。例如httpd程序包提供了httpd.service文件。
  • /run/systemd/system/:运行时所建立的unit文件。优先级高于已安装的服务unit文件所在的目录。
  • /etc/systemd/system/:经过systemctl enable所建立的和用于扩展一个服务所添加的unit文件目录。优先级高于运行时unit文件。

优先级:/etc/systemd/system/ --> /run/systemd/system/ --> /usr/lib/systemd/system/。

Systemd配置文件

/etc/systemd/system.conf是Systemd的配置文件,用户能够编辑此文件来修改值。想要恢复默认值的话直接删除此文件便可。文件中每一个选项的做用能够参考man手册systemd-system.conf(5)。

主特性

  • 基于socket激活(socket-based):在引导时,系统针对全部支持这类激活的系统服务建立监听socket,一旦服务启动就将这些socket传递给它们。这不只容许systemd并行启动服务,还使得服务在重启的时候不会丢失任何在其服务不可用期间发送给它的消息(由于相关的socket仍然能够访问而且将全部的消息放入队列中)。该特性须要使用socket unit。
  • 基于总线激活(bus-based):当第一次被客户端程序访问的时候,使用D-Bus用于IPC的系统服务能够按需启动。该特性须要使用D-Bus服务文件。
  • 基于设备激活(device-based):当某种特定的硬件设备被插入或者可用时,支持基于设备激活的系统服务能够按需启动。该特性须要使用device unit。
  • 基于路径激活(path-based):当一个文件或者目录改变其状态时,支持基于路径激活的系统服务能够按需启动。该特性须要使用path unit。
  • 挂载和自动挂载点管理:Systemd监视和管理挂载和自动挂载点。该特性须要使用mount和automount unit。
  • 进击的并行性(aggressive parallelization):因为具有基于socket激活的特性,只要全部监听的socket准备就绪,systemd就能够并行启动服务。结合系统服务的按需激活特性,并发激活有效地减小了系统启动的时间。
  • 支持事务的(transactional)unit激活逻辑:在激活或者关闭(deactivate)一个unit以前,systemd会计算它的依赖关系,建立一个临时事务,验证事务的一致性。当一个事务出现不一致的状况时,systemd会在其报错以前尝试去校对它并从中移除一些不重要的工做。
  • 向后兼容(backward compatibility)SysV init:支持遵循LSB标准的SysV init脚本。

兼容性变化

Systemd在设计的时候尽量作到与SysV和Upstart兼容,不过仍是有一些点是不一样的,须要留意:

  • Systemd对于运行级别的支持是有限的,并非全部的运行级别都支持。其对于运行级别的支持是经过target unit来实现的,相似一种映射关系,例如graphical.target映射到runlevel5。systemd程序包在发行的时候包含了runlevel命令,不过用户因该尽可能避免使用该命令。
  • systemctl程序不支持自定义子命令。在CentOS 6的SysV init脚本中,除了支持start、stop和restart这些基础子命令之外,脚本做者还能够撰写任何本身但愿实现的功能实现额外的子命令。例如RHEL 6中的iptables脚本支持panic子命令,该子命令告诉系统进入panic模式,丢弃全部的流入和流出的数据包。而systemctl,仅支持文档中列出的子命令。
  • 非由systemd所启动的服务,没法收到systemctl管理。当使用systemd启动服务的时候,systemd会记录并追踪服务的主进程PID,systemctl命令经过该PID来管理服务进程。若用户经过程序的CLI程序启动服务的话,那么systemd就没法获取并追踪该PID了。
  • Systemd只能中止运行中的服务。在之前,RHEL 6和以往的版本中,系统使用【/etc/rc0.d/】中的字符连接来关闭全部可用的服务而不关心它们的状态。在systemd中,只有运行中的服务会被关闭了。
  • 系统服务没法从标准输入流中读取数据。当systemd启动一个服务的时候,会将/dev/null和服务的STDIN关联起来,使得用户没法与其交互。
  • 系统服务不会从调用它们的用户和会话中继承任何上下文(context,例如HOME和PATH这类环境变量)。每一个服务运行在一个干净的执行上下文中。
  • 当加载一个SysV init脚本的时候,systemd从LSB头中读取依赖关系并在运行时解释。
  • Systemd的服务unit有一个代码写死的5分钟超时时长,用于处理那些运行出现故障的服务。这个时长能够在独立的服务类unit文件中修改。

 

管理服务

在SysV init和Upstart中,使用【/etc/rc.d/init.d/】下的shell脚本(通常是bash)来管理服务,使用的命令是service和chkconfig。在Systemd中使用service类型的unit文件(.service文件)来管理,使用的命令统一为systemctl。

因为向后兼容的特性的存在,旧命令依然可用,可是官方并不建议。新旧命令的对应关系以下。

service命令和systemctl命令对照表,service命令用于管理一个服务的启动和中止。

service  systemctl  描述 
 service name start  systemctl start name.service  启动一个服务
 service name stop  systemctl stop name.service  中止一个服务
 service name restart  systemctl restart name.service  重启一个服务
 service name condrestart  systemctl try-restart name.serivce  只有当服务处于运行状态时才重启服务
 service name reload  systemctl reload name.service  重载服务,通常用于配置文件的修改后执行
 serivce name status

 systemctl status name.service

 systemctl is-active name.service

 查看服务的运行状态
 service --status-all  systemctl list-units --type service --all  查看全部服务的运行状态

chkconfig命令和systemctl命令对照表,chkconfig命令用于管理服务的开机启动状况以及将服务归入chkconfig管理。

chkconfig systemctl 描述
 chkconfig name on  systemctl enable name.service  使服务开机启动
 chkconfig name off  systemctl disable name.service  禁止服务开机启动
 chkconfig --list name

 systemctl status name.service

 systemctl is-enable name.service

 查看服务是否开机启动
 chkconfig --list  systemctl list-unit-files --type service  列出全部的服务并检查其是否开机启动
 chkconfig --list  systemctl list-dependencies --after  列出在指定的unit以前须要被启动的服务
 chkconfig --list  systemctl list-dependencies --before  列出在指定的unit以后须要被启动的服务

在书写unit名称的时候,通常是建议写全名,这样比较能顾名思义,例如“httpd.service”。不过简写,不写unit类型后缀,那么systemctl也是能够识别的,以下2个命令的效果是同样的,systemctl会自动识别unit类型。

~]# systemctl stop nfs-server.service ~]# systemctl stop nfs-server

unit的名称若是比较长,能够定义一个简短的别名,想查看别名的话使用以下命令。show子命令能够查看不少unit的信息。

[root@c7-server ~]# systemctl show httpd.service -p Names Names=httpd.service

若是结合chroot命令来运行systemctl命令的话,大部分命令是不可用的,除了systemctl enable和systemctl disable,详见官方文档

列出服务

列出全部当前已载入的服务。

[root@c7-server ~]# systemctl list-units --type service UNIT LOAD ACTIVE SUB DESCRIPTION abrt-ccpp.service loaded active exited Install ABRT coredump hook abrt-oops.service loaded active running ABRT kernel log watcher abrt-xorg.service loaded active running ABRT Xorg log watcher ... ● kdump.service loaded failed failed Crash recovery kernel arming ...

UNIT:unit的完整名称。

LOAD:加载的状况。

ACTIVE:高级激活状态。

SUB:低级激活状态。这个状态会取决于unit的类型有不一样的状态值。

DESCRIPTION:描述。

默认状况下列出的是已激活的服务(不过从上述结果来看,状态为failed的也能够被列出),想要查看已加载的全部状态的服务的话,须要传递--all选项。

注:--type和--all均有缩写版,为了顾名思义,这里尽可能都参照官方文档,给出了完整版选项。

从结果上来看,LOAD状态为not-found的也能够被列出。

[root@c7-server ~]# systemctl list-units --type service --all UNIT LOAD ACTIVE SUB DESCRIPTION abrt-ccpp.service loaded active exited Install ABRT coredump hook abrt-oops.service loaded active running ABRT kernel log watcher abrt-vmcore.service                                   loaded    inactive dead    Harvest vmcores for ABRT ... ● apparmor.service not-found inactive dead apparmor.service ... ● kdump.service loaded failed failed Crash recovery kernel arming ...

查看全部已安装的服务类unit单元,并可查看其是否开机启动。

[root@c7-server ~]# systemctl list-unit-files UNIT FILE STATE proc-sys-fs-binfmt_misc.automount static ... tmp.mount disabled ... cups.path enabled ... sssd-autofs.service indirect ...

显示服务状态

[root@c7-server ~]# systemctl status httpd.service ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Active: inactive (dead) Docs: man:httpd(8) man:apachectl(8) [root@c7-server ~]# systemctl start httpd.service [root@c7-server ~]# systemctl status httpd.service ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Active: active (running) since Fri 2019-11-22 11:49:33 CST; 1s ago Docs: man:httpd(8) man:apachectl(8) Main PID: 3193 (httpd) Status: "Processing requests..." Tasks: 6 CGroup: /system.slice/httpd.service ├─3193 /usr/sbin/httpd -DFOREGROUND ├─3195 /usr/sbin/httpd -DFOREGROUND ├─3196 /usr/sbin/httpd -DFOREGROUND ├─3197 /usr/sbin/httpd -DFOREGROUND ├─3199 /usr/sbin/httpd -DFOREGROUND └─3201 /usr/sbin/httpd -DFOREGROUND Nov 22 11:49:32 c7-server systemd[1]: Starting The Apache HTTP Server... Nov 22 11:49:33 c7-server systemd[1]: Started The Apache HTTP Server.

服务处于启动或中止的状态时,有不一样的状态信息显示。使用root用户执行此命令,还能够显示日志信息。

若是仅但愿查看服务是否启动,是否开机启动的话,可以使用以下命令。

[root@c7-server ~]# systemctl is-active httpd.service active [root@c7-server ~]# systemctl is-enabled httpd.service disabled

启动、中止和重启等

~]# systemctl start httpd.service ~]# systemctl stop httpd.service ~]# systemctl restart httpd.service

若是服务本来是中止的状态,则执行restart会启用该服务。若是咱们但愿只有当服务当前是启动的状态才重启的话,那么应该执行try-restart。

~]# systemctl try-restart httpd.service

某些服务支持在不打断运行状态的状况下重载服务从而读取配置文件。

~]# systemctl reload httpd.service

若是服务不支持重载的话,服务会忽略systemd的reload操做。为了方便,确保修改的配置文件必定会生效,能够执行以下2个子命令。

reload-or-restart:尝试reload,若是服务不支持就restart。

reload-or-try-restart:尝试reload,若是服务不支持就try-restart。若是服务自己没启动,那么再执行了此命令后应该也不会启动,须要手工启动。启动时,服务就会去读取配置文件了。

~]# systemctl reload-or-restart httpd.service ~]# systemctl reload-or-try-restart httpd.service

开机启动

~]# systemctl enable httpd.service ~]# systemctl disable httpd.service

当咱们设置开机启动的时候,systemd会读取服务的配置文件(/usr/lib/systemd/system/httpd.service)中的[Install]部分。

[Install] WantedBy=multi-user.target

根据此部分的内容建立字符连接。

Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

若是服务自己是开机启动的,那么再执行一次enable的话并不会建立字符连接文件。想确保其必定建立的话,可以使用reenable。

~]# systemctl reenable httpd.service Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service. Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

关闭开机启动,就是删除字符连接了。

~]# systemctl disable httpd.service Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.

systemd支持mask操做,若是一个服务被mask了,那么它没法被手动启动或者被其余服务所启动,也没法被设置为开机启动。

[root@c7-server ~]# systemctl mask httpd.service Created symlink from /etc/systemd/system/httpd.service to /dev/null. [root@c7-server ~]# systemctl start httpd.service Failed to start httpd.service: Unit is masked. [root@c7-server ~]# systemctl enable httpd.service Failed to execute operation: Cannot send after transport endpoint shutdown

可以使用unmask来取消mask。

~]# systemctl unmask httpd.service Removed symlink /etc/systemd/system/httpd.service.

启动一个冲突的服务

在systemd中存在积极的(positive)依赖和消极的(negative)依赖。启动某个特定的服务,可能会要求启动一个或多个其余服务(此为积极的依赖),或者要求中止一个或多个其余服务(此为消极的依赖)。

当你尝试启动某个服务的时候,systemd会自动解决这些依赖关系。注意,systemd不会显式通知用户。若是你已经启动了一个服务A(好比postfix),而后你尝试启动服务B(好比sendmail),服务B和服务A有消极的依赖关系,那么当你启动服务B的时候,服务A会自动被中止。

注:sendmail和postfix都是邮件服务,之间存在消极的依赖关系。

 

TARGET

Systemd上使用target来模仿之前的运行级别的概念。不过要注意,这只是模仿,并不表明彻底同样。target能够看做是一系列的unit的集合从而实现某个运行级别的功能。而且这些target之间会存在一个依赖链的关系。例如想启动图形界面(graphical.target)的话,就须要启动图形服务(gdm.service)或者帐户服务(accounts-daemon.service)而且须要激活multi-user.target。一样地,multi-user.target须要启动网络服务(NetworkManager.service)或者D-Bus(dbus.service)并激活basic.target。basic.target也有本身的依赖。

运行级别和target的对应关系以下表。

运行级别 Target Units 描述
0 runlevel0.target, poweroff.target 关闭系统并关闭电源
1 runlevel1.target, rescue.target 救援模式
2 runlevel2.target, multi-user.target 非图形的多用户模式
3 runlevel3.target, multi-user.target 非图形的多用户模式
4 runlevel4.target, multi-user.target 非图形的多用户模式
5 runlevel5.target, graphical.target 带图形的多用户模式
6 runlevel6.target, reboot.target 重启

查看、切换运行级别/target的新旧命令以下表所示,应尽可能避免使用旧的命令。

旧命令 新命令 描述
runlevel systemctl list-units --type target 查看当前系统运行于哪一个target下
telinit runlevel systemctl isolate name.target 修改当前的target

查看默认target

~]# systemctl get-default graphical.target

这个值的获取,实际上是去检索字符连接。

~]# ls -l /etc/systemd/system/default.target lrwxrwxrwx. 1 root root 36 Oct 17 15:06 /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target

查看当前target

~]# systemctl list-units --type target UNIT LOAD ACTIVE SUB DESCRIPTION basic.target loaded active active Basic System bluetooth.target loaded active active Bluetooth cryptsetup.target loaded active active Local Encrypted Volumes getty-pre.target loaded active active Login Prompts (Pre) getty.target loaded active active Login Prompts graphical.target loaded active active Graphical Interface local-fs-pre.target loaded active active Local File Systems (Pre) local-fs.target loaded active active Local File Systems multi-user.target      loaded active active Multi-User System network-online.target loaded active active Network is Online network-pre.target loaded active active Network (Pre) network.target loaded active active Network nfs-client.target loaded active active NFS client services nss-user-lookup.target loaded active active User and Group Name Lookups paths.target loaded active active Paths remote-fs-pre.target loaded active active Remote File Systems (Pre) remote-fs.target loaded active active Remote File Systems rpc_pipefs.target loaded active active rpc_pipefs.target slices.target loaded active active Slices sockets.target loaded active active Sockets sound.target loaded active active Sound Card swap.target loaded active active Swap sysinit.target loaded active active System Initialization timers.target loaded active active Timers

这个命令查询出来的,是当前已加载并激活的target。那么咱们如何从里面找到当前的target是什么呢?

在bootup(7)的man手册中有描述,并非全部的unit都是并行启动的,局部并行,总体依然是有前后次序之分的。例如:

sysinit.target --> basic.target --> multi-user.target --> graphical.target

rescue.target和emergency.target应该都是单独出现,也就是说:

见到rescue.target或者emergency.target或者graphical.target,那么就是对应的target,这三者之间不会有并存的关系。

见到multi-user.target,就看看有没有graphical.target,没有的话那就是multi-user.target。

设置默认target

~]# systemctl set-default multi-user.target Removed symlink /etc/systemd/system/default.target. Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.

修改当前的target

相似于之前的切换运行级别。

~]# systemctl isolate multi-user.target

执行了该命令之后,我在Xshell的终端不会断开,不过VMware中的虚拟机已经退出了GUI进入了CLI。

切换救援(rescue)模式

当正常的系统启动流程失败的时候,能够进入救援模式。救援模式是一种单用户的模式,用于让用户修复系统。在救援模式中,OS尝试挂载全部的文件系统并启动一些重要的系统服务,但它不会激活网络服务也只容许单用户同时登陆。相似于之前的单用户模式。

~]# systemctl rescue

切换至救援模式之后,Xshell终端所有退出并没有法登录,并收到广播通知。

Broadcast message from root@c7-server on pts/1 (Fri 2019-11-22 17:14:20 CST): The system is going down to rescue mode NOW!

若是管理员不想让用户收到这个通知,可使用--no-wall选项。

VMware控制台退出登陆并要求root密码从新登陆。

也可使用isolate子命令切换至救援模式,可是isolate的方式,不会向其余用户发送切换救援模式的通知。

~]# systemctl isolate recue.target

切换紧急(emergency)模式

紧急模式是最小化的系统环境,相比救援模式,它所提供的服务就更少了,仅用于当进入救援模式都失败的时候。

紧急模式中,仅以只读的方式挂载根文件系统,其余的全部本地文件系统均不挂载,不会激活网络服务,只启动少量基本服务,须要root密码。

一样也支持isoloate切换方式和--no-walls选项。一样会退出Xshell的终端,仅在VMware控制台容许登陆。所以就不截图了,贴命令便可。

~]# systemctl emergency ~]# systemctl emergency --no-walls ~]# systemctl isolate emergency.target

 

电源管理

在systemd中使用systemctl统一了电源管理,新旧命令对照表以下:

旧命令 新命令 描述
halt systemctl halt 中止系统
poweroff systemctl poweroff 关机
reboot systemctl reboot 重启
pm-suspend systemctl suspend 悬挂系统
pm-hibernate systemctl hibernate 休眠系统
pm-suspend-hybrid systemctl hybrid-sleep 休眠并悬挂系统

关机

在Linux中,关闭系统指的是halt,它会中止全部的进程以及CPU,可是并无关闭掉电源。而poweroff则比较接近于咱们所理解的关机。

若是在VMware中halt了一个系统,那么它会提示你须要手工关闭计算机的电源才可完成关机。而poweroff则不用。

 

 

所以在Linux环境下的关机,应该是使用poweroff来取代halt。

正确关机:

~]# systemctl poweroff

一样,关机命令会向系统中的用户发送消息,支持--no-wall选项不发送消息。

~]# systemctl poweroff --no-all

关机也能够经过shutdown命令。虽然该命令也会调用systemctl来完成关机,可是它支持延时关机和取消延时关机。

~]# shutdown --poweroff hh:mm ~]# shutdown --halt +m ~]# shutdown -c

时间的参数,能够修改成now,等同于+0,表示当即关机。

重启

~]# systemctl reboot ~]# systemctl reboot --no-wall

悬挂和休眠

悬挂(suspend)指的是将系统的运行状态保存在内存中同时伴随内存模块异常,并关闭机器中的大部分设备。当用户回到计算机面前时,能够从内存中恢复。因为是从内存中恢复而且避免了再一次引导系统,所以它的恢复速度比休眠(hibernation)要快。

若是在悬挂期间电源出现故障,那么系统的状态就会丢失了。

~]# systemctl suspend

休眠(hibernate)和悬挂的做用类似,都是保存系统的状态避免了再次从新引导系统,区别在于休眠是将系统的状态保存在磁盘中。所以其恢复系统的速度较慢。

~]# systemctl hibernate

还有一个休眠并悬挂系统。

~]# systemctl hybrid-sleep

感受做为运维,休眠和悬挂应该是不怎么会在服务器上所使用的,所以了解下常见的关机和重启操做便可。

 

建立和修改unit文件

建立和修改unit文件是理解systemd工做的重点和难点,对于服务的开发人员来讲,应该是必备的技能。对于我目前的运维阶段来讲,只要达到会看便可,所以这里先暂时留白,感兴趣的能够直接看开头参考资料中的红帽文档。

Unit文件存在于文章开头处提到的三个目录,其中“/etc/systemd/system/”目录是留给管理员自定义的,所以咱们自定义的unit文件建议放该目录下。

Unit文件的文件名:

unit_name.type_extension

unit名和类型都是可替换的,合在一块儿叫作完整(full)的unit文件名。

例如sshd有两个常见的unit文件:sshd.service和sshd.socket。

若是咱们想对一个unit作选项补充的话,能够新增一个“.d”目录并在其下建立补充的配置文件。例如当咱们想为sshd.service增长自定义的配置选项时,能够建立sshd.service.d/custom.conf配置文件。详见文档

另外,还能够存在“sshd.service.wants/”和“sshd.service.requires/”目录,这些目录下都是字符连接文件,连接到其余的unit文件,以此来决定sshd.service的依赖关系。字符连接会自动产生,也可人为建立。详见文档

了解unit文件的结构

Unit文件由典型的三部分构成:

  • [Unit]:包含通用的选项,不受unit类型所影响。这部分主要提供了unit的简单描述信息,指定其行为,定义其依赖关系。
  • [unit type]:这部分的选项,是和unit类型相关的。即若是是.service类的unit,就有其相关的特定选项。
  • [Install]:在经过systemctl enable或者disable的时候,所涉及到的选项。

[Unit]和[Install]的选项的完整参考手册,可见systemd.unit(5);[unit type]的选项,则须要根据unit的类型来肯定。可经过如下命令查找对应的man手册。

~]# man -k systemd ... systemd.scope (5) - Scope unit configuration systemd.service (5) - Service unit configuration systemd.slice (5) - Slice unit configuration systemd.snapshot (5) - Snapshot unit configuration systemd.socket (5) - Socket unit configuration ... systemd.swap (5) - Swap unit configuration systemd.target (5) - Target unit configuration ...

当编辑或者新建了unit的文件,须要使用该命令重载systemd,使其知晓。

~]# systemctl daemon-reload

 

总结

最后对于unit文件的具体描述比较少,在初级运维的时候可能就够用了。可是在慢慢深刻后,对于系统的排错或者须要开发服务的时候,就须要来了解这块的内容了,到时候如有遇到再来补充。

相关文章
相关标签/搜索