Systemctl 示例
下面介绍了如何使用 systemctl 命令来管理各种服务。
检查服务的状态
可以检查服务的当前状态,如下所示。
[jack@onitroad ~]# systemctl status chronyd.service chronyd.service - NTP client/server Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled) Active: active (running) since Mon 2014-08-24 15:52:20 AEST; 2 days ago Main PID: 718 (chronyd) CGroup: /system.slice/chronyd.service └─718 /usr/sbin/chronyd -u chrony
在这里我们可以看到 chronyd.service 单元当前处于“active (running) 活动(运行)”状态,并且该服务已启用,这意味着它当前配置为在系统启动时启动。
我们不需要每次都在服务末尾指定 .service ,因为默认情况下它会自动放在末尾,以后将省略它。
或者,我们也可以使用“is-active”来检查服务是否处于活动状态,这将显示该服务当前是否正在运行。
[jack@onitroad ~]# systemctl is-active chronyd active
同样,我们还可以使用“is-enabled”检查服务是否已启用在启动时启动。
[jack@onitroad ~]# systemctl is-enabled chronyd enabled
启动、停止和重启服务
Systemctl 可用于启动、停止和重新启动服务,如图所示。
这里我们停止 chronyd 服务并确认它不再主动运行。
[jack@onitroad ~]# systemctl stop chronyd [jack@onitroad ~]# systemctl is-active chronyd inactive
我们可以启动服务备份并确认它再次处于活动状态。
[jack@onitroad ~]# systemctl start chronyd [jack@onitroad ~]# systemctl is-active chronyd active
我们可以重新启动服务,而不是分两步执行停止然后启动。
如果我们在此之后检查服务的状态,则活动自时间将随着服务重新启动而更改,并且 PID 也将更改。
[jack@onitroad ~]# systemctl restart chronyd
如果我们尝试重新启动当前未主动运行的服务,它将启动。
相反,我们可以使用 'try-restart' 仅在服务当前正在运行时才执行重新启动。
如果该服务尚未运行并且我们使用“try-restart”,它将不会启动。
[jack@onitroad ~]# systemctl is-active chronyd active [jack@onitroad ~]# systemctl stop chronyd [jack@onitroad ~]# systemctl is-active chronyd inactive [jack@onitroad ~]# systemctl try-restart chronyd [jack@onitroad ~]# systemctl is-active chronyd inactive [jack@onitroad ~]# systemctl restart chronyd [jack@onitroad ~]# systemctl is-active chronyd active
可以重新加载服务,这只会刷新配置文件更改等内容,但主进程将继续运行,因此 PID 不会更改。
[jack@onitroad ~]# systemctl reload sshd
启用和禁用服务
如果启用了某个服务,它将在系统引导期间自动启动,但是如果禁用某个服务,它将不会在系统引导期间自动启动。
用户或者其他服务可以手动启动已禁用的服务。
下面我们可以看到 chronyd 服务已启用,禁用后符号链接被删除。
一旦禁用该服务仍将积极运行,但是如果系统重新启动,除非手动启动,否则该服务将不会启动。
[jack@onitroad ~]# systemctl is-enabled chronyd enabled [jack@onitroad ~]# systemctl disable chronyd rm '/etc/systemd/system/multi-user.target.wants/chronyd.service' [jack@onitroad ~]# systemctl is-enabled chronyd disabled [jack@onitroad ~]# systemctl is-active chronyd active
当在系统引导期间启用该服务以启动时,将重新创建符号链接。
[jack@onitroad ~]# systemctl enable chronyd ln -s '/usr/lib/systemd/system/chronyd.service' '/etc/systemd/system/multi-user.target.wants/chronyd.service'
如果我们尝试启用已启用的服务,它不会重新创建已存在的符号链接,因此不会有任何输出。
我们可以使用“reenable”重置符号链接,这将首先删除符号链接,然后重新创建它。
[jack@onitroad ~]# systemctl enable chronyd [jack@onitroad ~]# systemctl reenable chronyd rm '/etc/systemd/system/multi-user.target.wants/chronyd.service' ln -s '/usr/lib/systemd/system/chronyd.service' '/etc/systemd/system/multi-user.target.wants/chronyd.service'
为了防止服务被用户或者其他服务自动和手动启动,我们可以屏蔽该服务。
屏蔽服务本质上将符号链接定向到 /dev/null 以便在使用它时不会发生任何事情。
[jack@onitroad ~]# systemctl mask chronyd ln -s '/dev/null' '/etc/systemd/system/chronyd.service'
一旦服务被屏蔽,它就不会在启动时启动,也不能手动启动。
如果正在运行的进程被屏蔽,它将保持活动状态。
[jack@onitroad ~]# systemctl is-active chronyd active [jack@onitroad ~]# systemctl stop chronyd [jack@onitroad ~]# systemctl start chronyd Failed to issue method call: Unit chronyd.service is masked.
为了证明这一点,测试服务器在服务被屏蔽的情况下重新启动,并且在服务器重新启动后执行了服务状态,确认它没有运行。
[jack@onitroad ~]# systemctl status chronyd chronyd.service Loaded: masked (/dev/null) Active: inactive (dead) [jack@onitroad ~]# systemctl is-active chronyd inactive
要扭转这种情况,可以取消屏蔽服务,然后可以成功启动它。
[jack@onitroad ~]# systemctl unmask chronyd rm '/etc/systemd/system/chronyd.service' [jack@onitroad ~]# systemctl start chronyd [jack@onitroad ~]# systemctl is-active chronyd active
查看所有服务的状态
可以使用以下命令查看所有服务的当前状态列表,删除 --all 以仅列出活动服务。
systemctl list-units --type service --all
可以查看所有服务的列表,以查看它们当前是否已使用以下命令启用。
systemctl list-unit-files --type service
在许多基于 Linux 的操作系统中,例如 Debian 8、Red Hat Enterprise Linux (RHEL) 和 CentOS 7 systemd 现在是默认的 init 系统,用于服务管理。