20 管理系统服务
systemd提供systemctl命令来运行、关闭、重启、显示、启用/禁用系统服务。
20.1 sysvinit命令和systemd命令
systemd提供systemctl命令与sysvinit命令的功能类似。当前版本中依然兼容service和chkconfig命令,相关说明如表3,但建议用systemctl进行系统服务管理。
表 3 sysvinit命令和systemd命令的对照表
sysvinit命令 | systemd命令 | 备注 |
---|---|---|
service network start | systemctl start network.service | 用来启动一个服务 (并不会重启现有的)。 |
service network stop | systemctl stop network.service | 用来停止一个服务 (并不会重启现有的)。 |
service network restart | systemctl restart network.service | 用来停止并启动一个服务。 |
service network reload | systemctl reload network.service | 当支持时,重新装载配置文件而不中断等待操作。 |
service network condrestart | systemctl condrestart network.service | 如果服务正在运行那么重启它。 |
service network status | systemctl status network.service | 检查服务的运行状态。 |
chkconfig network on | systemctl enable network.service | 在下次启动时或满足其他触发条件时设置服务为启用。 |
chkconfig network off | systemctl disable network.service | 在下次启动时或满足其他触发条件时设置服务为禁用。 |
chkconfig network | systemctl is-enabled network.service | 用来检查一个服务在当前环境下被配置为启用还是禁用。 |
chkconfig --list | systemctl list-unit-files --type=service | 输出在各个运行级别下服务的启用和禁用情况。 |
chkconfig network --list | ls /etc/systemd/system/*.wants/network.service | 用来列出该服务在哪些运行级别下启用和禁用。 |
chkconfig network --add | systemctl daemon-reload | 当您创建新服务文件或者变更设置时使用。 |
20.2 显示所有当前服务
如果您需要显示当前正在运行的服务,使用命令如下:
# systemctl list-units --type service
例如显示当前正在运行的服务,命令如下:
[root@superman-21 ~]# systemctl list-units --type service
UNIT LOAD ACTIVE SUB DESCRIPTIO>
atd.service loaded active running Deferred e>
auditd.service loaded active running Security A>
chronyd.service loaded active running NTP client>
crond.service loaded active running Command Sc>
dbus.service loaded active running D-Bus Syst>
dkms.service loaded active exited Builds and>
dracut-shutdown.service .
.
.
loaded active exited Record Sys>
systemd-user-sessions.service loaded active exited Permit Use>
systemd-vconsole-setup.service loaded active exited Setup Virt>
systemtap.service loaded active exited Run a conf>
tuned.service loaded active running Dynamic Sy>
vdo.service loaded active exited VDO volume>
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.
54 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
[root@superman-21 ~]#
如果您需要显示所有的服务(包括未运行的服务),需要添加-all参数,使用命令如下:
# systemctl list-units --type service --all
例如显示所有的服务(包括未运行的服务),命令如下:
[root@superman-21 ~]# systemctl list-units --type service -all
UNIT LOAD ACTIVE SUB DESCR>
● apparmor.service not-found inactive dead appar>
atd.service loaded active running Defer>
auditd.service loaded active running Secur>
auth-rpcgss-module.service loaded inactive dead Kerne>
● autofs.service not-found inactive dead autof>
chronyd.service loaded active running NTP c>
cpupower.service loaded inactive dead Confi>
crond.service loaded active running Comma>
dbus.service loaded active running D-Bus>
.
.
.
tuned.service loaded active running Dynam>
udisks2.service loaded inactive dead Disk >
vdo.service loaded active exited VDO v>
virtlockd.service loaded inactive dead Virtu>
virtlogd.service loaded inactive dead Virtu>
● xencommons.service not-found inactive dead xenco>
● xendomains.service not-found inactive dead xendo>
● ypbind.service not-found inactive dead ypbin>
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.
129 loaded units listed.
To show all installed unit files use 'systemctl list-unit-files'.
[root@superman-21 ~]#
20.3 显示服务状态
如果您需要显示某个服务的状态,可执行如下命令:
# systemctl status name.service
相关状态显示参数说明如表4所示。
表 4 状态参数说明
参数 | 描述 |
---|---|
Loaded | 说明服务是否被加载,并显示服务对应的绝对路径以及是否启用。 |
Active | 说明服务是否正在运行,并显示时间节点。 |
Main PID | 相应的系统服务的PID值。 |
CGroup | 相关控制组(CGroup)的其他信息。 |
如果您需要鉴别某个服务是否运行,可执行如下命令:
# systemctl is-active name.service
is-active命令的返回结果如下:
表 5 is-active命令的返回结果
状态 | 含义 |
---|---|
active(running) | 有一只或多只程序正在系统中执行 |
active(exited) | 仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行。 举例来说,开机或者 是挂载时才会进行一次的 quotaon 功能 |
active(waiting) | 正在执行当中,不过要等待其他的事件才能继续处理。例如:打印的队列相关服务 就是这种状态,虽然正在启动中,不过也需要真的有队列进来 (打印作业) 这样他才会继续唤醒打印机 服务来进行下一步打印的功能 |
inactive | 这个服务没有运行 |
同样,如果您需要判断某个服务是否被启用,可执行如下命令:
# systemctl is-enabled name.service
is-enabled命令的返回结果如下:
表 6 is-enabled命令的返回结果
状态 | 含义 |
---|---|
"enabled" | 已经通过 /etc/systemd/system/ 目录下的 Alias= 别名、 .wants/ 或 .requires/ 软连接被永久启用。 |
"enabled-runtime" | 已经通过 /run/systemd/system/ 目录下的 Alias= 别名、 .wants/ 或 .requires/ 软连接被临时启用。 |
"linked" | 虽然单元文件本身不在标准单元目录中,但是指向此单元文件的一个或多个软连接已经存在于 /etc/systemd/system/ 永久目录中。 |
"linked-runtime" | 虽然单元文件本身不在标准单元目录中,但是指向此单元文件的一个或多个软连接已经存在于 /run/systemd/system/ 临时目录中。 |
"masked" | 已经被 /etc/systemd/system/ 目录永久屏蔽(软连接指向 /dev/null 文件),因此 start 操作会失败。 |
"masked-runtime" | 已经被 /run/systemd/systemd/ 目录临时屏蔽(软连接指向 /dev/null 文件),因此 start 操作会失败。 |
"static" | 尚未被启用,并且单元文件的 "[Install]" 小节中没有可用于 enable 命令的选项。 |
"indirect" | 尚未被启用,但是单元文件的 "[Install]" 小节中 Also= 选项的值列表非空(也就是列表中的某些单元可能已被启用)、或者它拥有一个不在 Also= 列表中的其他名称的别名软连接。对于模版单元来说,表示已经启用了一个不同于 DefaultInstance= 的实例。 |
"disabled" | 尚未被启用,但是单元文件的 "[Install]" 小节中存在可用于 enable 命令的选项 |
"generated" | 单元文件是被单元生成器动态生成的。被生成的单元文件可能并未被直接启用,而是被单元生成器隐含的启用了。 |
"transient" | 单元文件是被运行时API动态临时生成的。该临时单元可能并未被启用。 |
"bad" | 单元文件不正确或者出现其他错误。 is-enabled 不会返回此状态,而是会显示一条出错信息。 list-unit-files 命令有可能会显示此单元。 |
例如查看gdm.service服务状态,命令如下:
[root@superman-21 ~]# 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.service(8)
[root@superman-21 ~]#
例如鉴别httpd服务是否运行,可执行如下命令:
[root@superman-21 ~]# systemctl is-active httpd
inactive
[root@superman-21 ~]#
例如判断httpd服务是否被启用,可执行如下命令:
[root@superman-21 ~]# systemctl is-enabled httpd
disabled
[root@superman-21 ~]#
20.4 运行服务
如果您需要运行某个服务,请在root权限下执行如下命令:
# systemctl start name.service
例如运行httpd服务,命令如下:
[root@superman-21 ~]# systemctl start httpd.service
[root@superman-21 ~]#
20.5 关闭服务
如果您需要关闭某个服务,请在root权限下执行如下命令:
# systemctl stop name.service
例如关闭蓝牙服务,命令如下:
[root@superman-21 ~]# systemctl stop httpd.service
[root@superman-21 ~]#
20.6 重启服务
如果您需要重启某个服务,请在root权限下执行如下命令:
# systemctl restart name.service
执行命令后,当前服务会被关闭,但马上重新启动。如果您指定的服务,当前处于关闭状态,执行命令后,服务也会被启动。
例如重启蓝牙服务,命令如下:
[root@superman-21 ~]# systemctl restart httpd.service
[root@superman-21 ~]#
20.7 启用服务
如果您需要在开机时启用某个服务,请在root权限下执行如下命令:
# systemctl enable name.service
例如设置httpd服务开机时启动,命令如下:
[root@superman-21 ~]# systemctl enable httpd.service
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
[root@superman-21 ~]#
20.8 禁用服务
如果您需要在开机时禁用某个服务,请在root权限下执行如下命令:
# systemctl disable name.service
例如在开机时禁用蓝牙服务启动,命令如下:
[root@superman-21 ~]# systemctl disable httpd.service
Removed /etc/systemd/system/multi-user.target.wants/httpd.service.
[root@superman-21 ~]#
标签:服务,20,service,一步,systemctl,active,loaded,openEuler,root From: https://blog.51cto.com/u_237826/6069369