我刚刚在服务器上安装了 nginx;现在我可以使用
ps aux | grep nginx
它正在以我的用户身份执行(这是正确的吗?还是应该以 root 身份运行?);无论如何,我无法用它做任何事情,例如无法停止它,因为
nginx -s stop
输出:
nginx: [alert] could not open error log file: open()
"/var/log/nginx/error.log" failed (13: Permission denied)
2017/05/02 04:03:34 [warn] 2482#2482: the "user" directive makes sense
only if the master process runs with super-user privileges, ignored in
/etc/nginx/nginx.conf:2
2017/05/02 04:03:34 [notice] 2482#2482: signal process started
2017/05/02 04:03:34 [error] 2482#2482: open() "/var/run/nginx.pid"
failed (2: No such file or directory)
我已经在 Google 上搜索了这些警告和错误,但我真的无法理解它们;有人可以解释一下吗:
- 日志文件警告和.pid文件错误的含义
- nginx 应该以我的用户身份运行还是以 root 身份运行(或其他方式)
更新:
我正在使用 ubuntu 服务器 16.04 (xenial),并且安装了 nginx,并添加了
deb http://nginx.org/packages/ubuntu/ xenial nginx
到 sources.list 然后
sudo apt-get install nginx
更新2
尝试使用“sudo”停止 nginx 仍然导致错误:
nginx: [error] open() "/var/run/nginx.pid" failed (2: No such file or directory)
无论如何我也感到困惑为什么
ps aux | grep nginx
显示在我的用户下运行的进程(但无法使用 PID 终止它,并且每次运行命令时 PID 都不同)
更新 3
跑步
nginx -t
输出:
nginx: [alert] could not open error log file: open()
"/var/log/nginx/error.log" failed (13: Permission denied)
2017/05/02 15:32:53 [warn] 8535#8535: the "user" directive makes sense
only if the master process runs with super-user privileges, ignored in
/etc/nginx/nginx.conf:2
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
2017/05/02 15:32:53 [emerg] 8535#8535: open() "/var/run/nginx.pid"
failed (13: Permission denied)
nginx: configuration file /etc/nginx/nginx.conf test failed
答案1
当您想要启动或停止 nginx 守护进程时,您需要具有 root 权限。以普通用户身份运行命令不起作用。
这几乎是 Linux 中所有守护进程的标准。
答案2
您是如何安装 nginx 的?也许您应该尝试使用存储库包以获得良好的默认配置,否则您可以阅读 nginx 手册以获取更多信息。对我来说,您的问题只是服务器配置错误。您可以指定您正在使用的发行版吗?cat /etc/issue
答案3
您需要以 root 身份运行 Nginx 主进程。然后,您可以配置 Nginx 以您喜欢的用户或组身份运行工作进程 - 这就是错误消息所指的内容。
具体如何操作取决于您的操作系统,您尚未指定。现在您知道问题是什么了,您可以使用 Google 来找出详细信息。
答案4
Nginx 以守护进程的方式运行,应该作为服务来管理,而不是用户进程。在 ubuntu 下,可以使用命令service
:
sudo service nginx start
启动 nginxsudo service nginx stop
停止 nginxsudo service nginx restart
停止然后重新启动 nginxsudo service nginx reload
告诉 nginx 在不停止服务的情况下重新加载其配置文件
编辑:并获取状态,sudo service nginx status
。