使用命令“ nginx”,“ service start nginx”和“ systemctl nginx start”启动nginx有什么区别?

时间:2019-01-03 06:23:25

标签: nginx nginx-location nginx-reverse-proxy

我已经注意到,每当我使用ubuntu命令“ nginx”启动nginx时,我都会执行systemctl状态nginx。它表明systemctl已禁用。此外,如果我先使用systemctl命令启动nginx,然后尝试使用nginx命令启动nginx,它会检查端口的可用性,然后说nginx:[emerg]仍然无法bind()。所以我认为一定有一个区别和他们的目的。当我使用nginx命令strng nginx时,停止nginx的唯一方法是强制使用killlall nginx或kill -9(进程ID)或清除端口。因此,我敢肯定它们之间会有一些区别。

2 个答案:

答案 0 :(得分:2)

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

运行命令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返回“ disabled”的原因。

希望这很有道理。

答案 1 :(得分:1)

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

因为它是一个非常简洁的脚本,所以它仅支持非常有限的一组操作(start | stop | reload ..)。

但是,如果您实际上要执行其他操作,则在这种情况下需要使用实际的初始化系统systemctl

一个合适的示例是使用systemctl sudo systemctl enable the-name-of-service在启动时启动服务,而使用service

则无法启动