Contents

在Linux上启动,停止和重新启动NGINX

1. 概述

Nginx 是一个轻量级、可靠的 Web 服务器,它是开源和免费的。我们可以将 Nginx 配置为负载均衡器、代理服务器 ,甚至邮件代理。

在使用任何服务器时,都会执行一些常见操作。这包括启动、停止和重新启动服务器。

在本教程中,我们将讨论在 Linux 上为 Nginx 服务器管理这些操作的步骤。

在我们继续之前,让我们首先找出在 Linux 上安装 Nginx 的不同方法。

2. 了解 Linux 中的系统管理器

系统管理器是 Linux 的构建块之一。它使用 PID 1 运行,负责启动整个 Linux 系统。systemdinitupstart是 Linux 中使用最广泛的三个系统管理器。系统管理器通过创建服务来提供运行和管理可执行文件的能力。在这里,我们将可执行文件定义为包含一组可以在 Linux 上运行的指令的文件或二进制文件。

一般来说,有三种方法可以在 Linux 中运行可执行文件。

首先,我们可以使用systemd服务管理器来管理*/lib/systemd目录中存在的所有服务。最新版本的 CentOS、Debian、Fedora、OpenSUSE、Redhat 和 Ubuntu默认启用了systemd* 。

在旧版本的 Ubuntu、CentOS 和其他 Linux 发行版上,我们可能找不到systemd。作为替代方案,传统的 init 系统管理所有服务。初始化服务脚本位于 /etc/init.d目录中。

最后,在某些情况下,机器上没有可用的systemdinit,或者它存在但用户无法访问。我们仍然可以通过将二进制文件作为进程启动来在此类设备上运行二进制文件。这是一种幼稚的方法,因为我们需要自己管理这个过程。在系统重新启动时,我们需要重新启动此过程。

2.1.确定 Linux 上的系统管理器

为了检测 Linux 机器上存在哪个系统管理器,我们可以使用以下命令:

$ sudo ls -l /proc/1/exe
lrwxrwxrwx. 1 root root 0 Apr  8 11:10 /proc/1/exe -> /usr/lib/systemd/systemd

在这里,我们检查 Linux 机器上第一个可执行文件的符号链接。在这种情况下,它链接到*systemd。*对于 init 系统,我们会得到类似这样的输出:

$ sudo ls -l /proc/1/exe
lrwxrwxrwx 1 root root 0 Apr  8 11:17 /proc/1/exe -> /sbin/init

到目前为止,我们已经学习了如何在 Linux 上运行可执行文件。现在让我们学习如何在每个环境中专门管理 Nginx 服务器。

3. Nginx 作为systemd服务运行

我们先看看是否有由systemctl管理的 Nginx 服务:

$ sudo ls -lah /lib/systemd/system/nginx.service
-rw-r--r--. 1 root root 616 Oct  7  2019 /lib/systemd/system/nginx.service

在这里,我们使用ls 命令在*/lib/systemd/system目录中查找nginx.service*文件。如果 Nginx 服务不可用,我们会得到类似这样的输出:

$ sudo ls /lib/systemd/system/nginx.service
ls: cannot access '/lib/systemd/system/nginx.service': No such file or directory

我们可以使用以下命令启动 Nginx 服务:

$ sudo systemctl start nginx

现在让我们使用systemctl命令获取 Nginx 服务器的状态:

$ sudo systemctl status nginx

如果服务器正在运行,我们将在输出中获得“活动(运行)”的状态。如果服务器由于任何原因无法启动,则输出将包含错误。我们还可以访问IP:PORT 来验证服务器是否已启动并正在运行。 停止 Nginx 服务器就像启动它一样简单:

$ sudo systemctl stop nginx

如果我们现在检查状态,它将被标记为“inactive (dead)”。

当有任何配置更改时,我们也可以重新启动服务器:

$ sudo systemctl restart nginx

Systemctl支持其他命令,如reloadisolatekill等,以提供对服务的更多控制。我们可以通过运行systemctl –help命令得到一个完整的列表。

4. Nginx 作为SysVinit服务运行

到目前为止,我们已经学会了使用systemctl来管理 Nginx 服务。现在让我们使用 init 服务执行相同的操作。在此之前,让我们看看机器上是否存在 Nginx 服务:

$ sudo ls -lah /etc/init.d/nginx
-rwxr-xr-x. 1 root root 4.2K Apr 13  2021 /etc/init.d/nginx

输出清楚地表明 Nginx 的服务文件存在。这个服务文件只不过是一个bash 脚本。为了使用init服务启动 Nginx 服务器,我们将使用start选项,如下所示:

$ sudo /etc/init.d/nginx start

现在让我们检查 Nginx 服务器的状态:

$ /etc/init.d/nginx status
[ ok ] nginx is running.

我们也可以通过传递重启选项来重启 Nginx 服务器。它将删除所有旧的 Nginx 进程,重新加载配置文件并启动新的 Nginx 进程:

$ sudo /etc/init.d/nginx restart

还有很多其他选项可以管理 Nginx 服务。我们可以使用*-h*选项来获取用法:

$ sudo /etc/init.d/nginx -h
Usage: /etc/init.d/nginx {start|stop|status|restart|reload|force-reload|upgrade|configtest|check-reload}

5. Nginx 作为进程运行

systemdinit都是Linux 中的服务管理器。因此,他们简化了管理运行过程的过程。但是我们也可以不使用任何服务管理器直接将 Nginx 服务器作为进程运行。值得注意的是,当我们使用任何服务管理器运行 Nginx 时,它会使用服务脚本隐式运行 Nginx 进程。

为了将 Nginx 作为进程运行,我们首先需要找到 Nginx 的安装路径:

$ sudo which nginx
/usr/sbin/nginx

which 是一个 Linux 实用程序,它返回可执行文件的完整路径,我们将其作为参数传递。这里 Nginx 可执行文件位于*/usr/sbin/nginx*。

现在,当我们运行这个可执行文件时,Nginx 服务器将启动:

$ sudo /usr/sbin/nginx

*如果我们查看systemdinit服务文件,我们会注意到两个服务都触发了相同的可执行文件/usr/sbin/nginx 。***服务管理器为我们提供了额外的抽象层来处理流程。

现在为了停止 Nginx 进程,我们将使用*killall *命令:

$ sudo killall nginx

killall是一个 Linux 命令,它按进程的名称杀死进程。上述命令将从机器中删除所有 Nginx 进程。 最后,重新启动进程只不过是杀死所有现有进程并重新运行它们。