首页 > 编程笔记 > Linux笔记 阅读:2

Linux systemctl:启动系统服务(附带实例)

从 Linux 7 版本开始,服务管理命令被统一成 systemctl 命令,这样做的优点是功能强大、管理方便,但是导致 systemctl 体系庞大、非常复杂。

这导致很多人非常反对使用 systemd,其中就包括 Linux 系统的内核开发者李纳斯·托瓦兹。反对者认为 systemd 不遵守 UNIX 原则;不考虑 Linux 系统之外的系统,如 BSD 系统;接管了过多服务,如 crond 可以被 systemd 的 timer 单元取代(目前 crond 依然可以使用),syslogd 被 systemd-journal 取代;systemd 的可靠程度也备受质疑。

但是这些都无法阻挡 Red Hat 使用 systemd 的决心,我们要想使用最新版本的 Red Hat 系列 Linux(Rocky Linux 也是 Red Hat 系列的),就不得不学习 systemd。

这里做一个说明,使用 RPM 包安装的服务,笔者也会将其叫作系统服务,因为 Rocky Linux 系统就是通过 RPM 包安装的。

通过systemctl启动系统服务

服务命令统一为 systemctl,也就是说,不论是启动服务、自启动服务、查询服务、启动字符界面,还是图形界面,都使用 systemctl 这个命令。

启动服务的命令也是 systemctl,主要是根据选项来区分:
[root@localhost ~]# systemctl [选项] 单元名
选项:
举个例子,尝试启动 RPM 包默认安装的 Apache 服务:
[root@localhost ~]# yum -y install httpd
# 安装 RPM 包的 Apache(注意 yum 源要正常)服务

[root@localhost ~]# systemctl start httpd.service
# 启动 RPM 包默认安装的 Apache 服务,没有提示,证明启动正常
# 在当前 Linux 的版本中,httpd.service 可以简写为 httpd
单元名在低版本的 Linux 7.x 中(如 Linux 7.1)需要写全,也就是写为 httpd.service。但是从 Linux 7.5 版本开始,单元名可以简写成 httpd。

在旧版本中,只有系统命令可以使用 Tab 键补全。在新版本系统中,我们惊喜地发现不但系统命令可以使用 Tab 键补全,而且系统的选项和参数都可以使用 Tab 键补全,不过需要确认 bash-completion 这个包是否安装了。

启动命令如果正常,通常是没有提示的,那么,其真的启动了吗?我们确认一下:
[root@localhost ~]# netstat -tulnp
...省略部分内容...
tcp6       0      0 :::80                   :::*                    LISTEN      28278/httpd
...省略部分内容...
#可以看到 80 端口已经开启

通过查看网络端口,可以确认 80 端口已经开启,开启该端口的是 httpd 服务。但是通过查看端口,我们无法确认启动的是 RPM 包安装的 Apache 服务,还是源码包安装的 Apache 服务。这时,就需要通过查看进程来进一步确认:
[root@localhost ~]# ps aux | grep httpd
root      28278  0.0  1.2 201161 11476 ?        Ss   10:09   0:00 /usr/sbin/httpd -DFOREGROUND
apache    28279  0.0  0.7 215887 7296  ?        S    10:09   0:00 /usr/sbin/httpd -DFOREGROUND
apache    28280  0.1  1.7 107923 616972 ?       S    10:09   0:00 /usr/sbin/httpd -DFOREGROUND
apache    28281  0.1  1.7 121037 216972 ?       S    10:09   0:00 /usr/sbin/httpd -DFOREGROUND
apache    28284  0.0  1.7 107923 616964 ?       S    10:09   0:00 /usr/sbin/httpd -DFOREGROUND
root      28628  0.0  0.2  6636  2072 pts/2    S+   10:34   0:00 grep --color=auto httpd
#启动的是 /usr/sbin/httpd,这是 RPM 包安装的 Apache 服务。

通过systemctl自启动系统服务

服务的启动只会在当前系统中生效,下次服务器重启之后,这个服务还是需要手工开启,这很麻烦,而且容易遗忘,因此服务不光需要启动,也需要自启动管理。

在 Rocky Linux 9 中,服务的自启动管理也被集成进 systemctl 命令中:
[root@localhost ~]# systemctl [选项] 单元名
选项:
我们依然使用 RPM 包默认安装的 Apache 服务来进行开机自启动的举例:
[root@localhost ~]# systemctl enable httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
# 把 RPM 包安装的 Apache 服务设置为自启动
注意看命令换行后出现的提示:建立符号链接(软链接),从 /etc/systemd/system/multi-user.target.wants/httpd.service 到 /usr/lib/systemd/system/httpd.service。这是表示,服务的启动命令都保存在 /usr/lib/systemd/system/ 中,这个服务是否开机自启动,需要看这个服务启动脚本是否在 /etc/systemd/system/multi-user.target.wants/ 目录中,这里已将 httpd 服务变成开机自启动,因此需要在 /etc/systemd/system/multi-user.target.wants/ 目录中建立 httpd.service 的软链接。

如果不想让 Apache 服务开机自启动,那么可以这样操作:
[root@localhost ~]# systemctl disable httpd
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service
# 禁止 RPM 包安装的 Apache 服务开机自启动。注意提示信息:取消了 /etc/systemd/system/multi-user.target.wants/ 目录中的 httpd.service 软链接

相关文章