CentOS 7下systemd管理的详解

2020-01-30 16:47:36王冬梅

当然对于"/"根目录的依赖实际上一定还是要串行执行,因为systemd 自己也存放在/之下,必须等待系统根目录挂载检查好。

不过对于类似/home 等挂载点,这种并发可以提高系统的启动速度,尤其是当/home是远程的 NFS 节点,或者是加密盘等,需要耗费较长的时间才可以准备就绪的情况下,因为并发启动,这段时间内,系统并不是完全无事可做,而是可以利用这段空余时间做更多的启动进程的事情,总的来说就缩短了系统启动时间。

Systemd 的使用

下面针对技术人员的不同角色来简单地介绍一下 systemd 的使用。本文只打算给出简单的描述,让您对 systemd 的使用有一个大概的理解。具体的细节内容太多,即无法在一篇短文内写全。还需要读者自己去进一步查阅 systemd的文档。

Unit 文件的编写

开发人员开发了一个新的服务程序,比如httpd,就需要为其编写一个配置单元文件以便该服务可以被systemd 管理,类似UpStart 的工作配置文件。在该文件中定义服务启动的命令行语法,以及和其他服务的依赖关系等。

此外我们之前已经了解到,systemd 的功能繁多,不仅用来管理服务,还可以管理挂载点,定义定时任务等。这些工作都是由编辑相应的配置单元文件完成的。我在这里给出几个配置单元文件的例子。

下面是 SSH 服务的配置单元文件,服务配置单元文件以.service为文件名后缀。

[root@kalaguiyin system]# cat/usr/lib/systemd/system/sshd.service 

[Unit]

Description=OpenSSH server daemon

After=network.target sshd-keygen.service

Wants=sshd-keygen.service

#[unit]部分,描述信息

[Service]

EnvironmentFile=/etc/sysconfig/sshd

ExecStart=/usr/sbin/sshd -D $OPTIONS

ExecReload=/bin/kill -HUP $MAINPID

KillMode=process

Restart=on-failure

RestartSec=42s

#[service]定义,ExecStartPre定义启动服务之前应该运行的命令;

#ExecStart 定义启动服务的具体命令行语法。

[Install]

WantedBy=multi-user.target

#[install]部分:WangtedBy表明这个服务是在多用户模式下所需要的。

那我们就来看下multi-user.target 吧:

[root@kalaguiyin system]# catmulti-user.target

[Unit]

Description=Multi-User System

Documentation=man:systemd.special(7)

Requires=basic.target

Conflicts=rescue.service rescue.target

After=basic.target rescue.servicerescue.target

AllowIsolate=yes

# Requires 定义表明 multi-user.target 启动的时候 basic.target 也必须被启动;另外 basic.target 停止的时# 候,multi-user.target 也必须停止。如果您接着查看 basic.target 文件,会发现它又指定了 sysinit.target