使用命令"nginx"、"service start nginx"和"systemctl nginx start"启动nginx有什么区别?

What's the difference between starting nginx with command "nginx", "service start nginx" and "systemctl nginx start"?

我注意到,每当我使用 ubuntu 命令 "nginx" 启动 nginx 时,我都会执行 systemctl status nginx。它表明 systemctl 被禁用。此外,如果我首先使用命令 systemctl start nginx 启动 nginx,然后我尝试使用命令 nginx 启动 nginx,它会检查端口的可用性,然后说 nginx: [emerg] still could not bind()。所以我认为一定有区别和他们的目的。当我使用命令 nginx strt nginx 时,停止 nginx 的唯一方法是使用 killlall nginx 或 kill -9(进程 ID)强制或清除端口。所以我很确定它们之间存在一些差异。

您提供的示例之间的区别在于进程的启动方式。

运行 命令 nginx 将启动应用程序并等待您的用户操作停止它。

systemctlservice 命令几乎相同,运行 service nginx startsystemctl start nginx 将在后台启动服务 运行 Nginx 守护进程。

您还可以使用它来执行 service nginx restartsystemctl restart nginx 来重新启动服务,甚至 service nginx reload / systemctl reload nginx 来重新加载配置而不完全停止Nginx 服务器。

之所以不能同时做nginxsystemctl start nginx是因为nginx配置已经监听了80端口,不能在同一个IP上监听同一个端口同时地址。

您还可以通过 运行 systemctl enable nginx 强制启动 nginx 服务,这就是为什么您的 systemctl status nginx returns 'disabled'.

希望这是有道理的。

service 命令只是一个简单的脚本,它基本上抽象了选择底层初始化系统(upstart、systemmd、/etc/init.d 或 systemctl)。

由于它是一个非常简洁的脚本,它只支持非常有限的一组操作(启动|停止|重新加载..)。

然而,如果你真的想执行额外的操作,你需要在这种情况下使用实际的初始化系统 systemctl

一个恰当的例子是在启动时使用 systemctl sudo systemctl enable the-name-of-service 启动服务,而使用 service

是不可能的