Contents

Linux中Systemctl和service命令的区别

1. 概述

在本教程中,我们将研究 Linux 中systemctl和 service命令之间的区别。

2. Linux初始化过程

在启动时,Linux 遵循一组预定义的启动顺序 。在引导过程的最后一步,它运行一个初始化系统。init 系统作为用户空间的第一个进程,负责启动其他重要的服务和进程。Linux中有两个最相关的init系统,即System V init(SysVInit)和SystemD。

2.1. SysVInit 和 SystemD

**SysVInit 是 Linux 中经典的初始化过程。*初始化过程依赖于单个服务在/etc/init.d*目录上安装相关脚本。

此外,脚本必须支持标准命令,例如start、  stop和 status。这个初始化系统的主要特点之一是它是一个启动一次的过程,之后不会跟踪单个服务。service 命令用于从终端运行这些初始化脚本。

另一方面,SystemD 是一个最新的初始化系统,旨在取代 SysVInit。

事实上,大多数 Linux 发行版(例如 Debian 和 Red Hat)已经在使用 SystemD 作为其开箱即用的初始化系统。

与 SysVInit 相比,SystemD 在初始化完成后继续作为守护进程运行。此外,他们还通过他们的cgroups积极跟踪服务。systemctl 命令是用户交互和配置 SystemD 的入口点。

简而言之,service和 systemctl命令的区别可以概括为两个不同的 init 系统的两个不同的命令。

3. service命令

service命令具有以下通用语法: 

$ service SCRIPT COMMAND

调用时,service命令会查找要在路径*/etc/init.d/* SCRIPT处运行的脚本。然后它运行脚本,将未更改的命令作为参数传递。当然,我们可以绕过service命令直接使用它的路径运行脚本。**但是,service 命令通过删除大部分变量并将根路径设置为当前工作目录来保证可预测的运行环境。

要将命令付诸实施,让我们在 Linux 系统上使用包管理器安装 Nginx:

$ sudo apt-get install -y nginx

请注意,Nginx 是任意选择的,示例适用于任何 SysVInit 脚本附带的软件安装。

安装完成后,我们会在*/etc/init.d目录中 看到一个文件名为nginx的 shell 脚本。要启动该进程,我们可以使用service nginx start*命令:

$ sudo service nginx start
 * Starting nginx nginx                                                                                          [ OK ]

除此之外,它还接受stop命令来终止后台 Nginx 进程:

$ sudo service nginx stop
 * Stopping nginx nginx                                                                                        [ OK ]

此外,我们还可以使用 restart命令重启 Nginx 进程:

$ sudo service nginx restart
 * Restarting nginx nginx                                                                                        [ OK ]

最后,我们还可以使用status命令检查进程的状态:

$ sudo service nginx status
 * nginx is running

4.  systemctl命令

systemctl命令与 SystemD 服务管理器交互以管理服务 。 与 service命令相反,它通过与 SystemD 进程交互而不是运行 init 脚本来管理服务

要启动、停止和重新启动 Nginx 进程,我们可以使用 systemctl运行相应的命令:

$ sudo systemctl start nginx
$ sudo systemctl stop nginx
$ sudo systemctl restart nginx 

此外,我们可以使用status命令检查 Nginx 服务的状态:

$ sudo systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2022-04-23 10:49:44 CEST; 16min ago
       Docs: man:nginx(8)
   Main PID: 6176 (nginx)
      Tasks: 2 (limit: 4632)
     Memory: 2.9M
     CGroup: /system.slice/nginx.service
             ├─6176 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             └─6177 nginx: worker process
Apr 23 10:49:44 vagrant-VirtualBox systemd[1]: Starting A high performance web server and a reverse proxy server...
Apr 23 10:49:44 vagrant-VirtualBox systemd[1]: Started A high performance web server and a reverse proxy server.

我们还可以启用 Nginx 服务,使其在系统启动时自动启动。为此,我们使用systemctl enable命令:

$ sudo systemctl enable nginx

另一方面,要将其从启动进程列表中删除,我们使用disable命令:

$ sudo systemctl disable nginx