Pau*_*ick 7 nginx upstart ubuntu-12.04
我有一个接近新的服务器,并且在按预期启动 nginx 时遇到问题。我已经以基本相同的方式配置了另一台服务器,它在那里工作。我想这两者之间肯定存在一些环境差异,但我一直没能找到它。
简短版本:
Starts - sudo nginx
Fails - sudo service nginx start
Fails - sudo service nginx restart
works - sudo service nginx stop
Run Code Online (Sandbox Code Playgroud)
当命令失败时,他们实际上并没有说什么:
* Restarting nginx nginx [fail]
Run Code Online (Sandbox Code Playgroud)
日志文件中没有其他内容(nginx[访问或错误]、系统日志)或写入屏幕
更多细节:
都说配置文件没问题
sudo service nginx configtest
sudo nginx -t
Run Code Online (Sandbox Code Playgroud)
我检查了 nginx.conf 的权限,它们没问题(与工作服务器相同)再次检查 www-data 是否可以访问日志文件等,确实如此
/etc/init.d/nginx 文件在两台服务器上是相同的,所使用的命令也是如此(见上文)
日志文件确实存在
用户/组 www-data 确实存在
Ubuntu 12.04 LTS
nginx 1.6
在每个服务器上运行请求的 - sudo strace service nginx start 除了下面的第一部分之外,我在两个不同的服务器上看到的唯一其他区别是指针和 PID 之类的东西。我在每组的两行前面加上了 ***
==== 那个有效的
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fd6076a09d0) = 24394
close(4) = 0
*** read(3, "/run/nginx.pid\n", 128) = 15
(… snip till the bottom…)
*** rt_sigreturn(0x11) = 24396
dup2(11, 2) = 2
close(11) = 0
read(10, "", 8192) = 0
exit_group(0) = ?
Run Code Online (Sandbox Code Playgroud)
================ 失败者
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f067e79d9d0) = 21761
close(4) = 0
*** read(3, "/run/nginx.pid\nserver_name\n", 128) = 27
(… snip till the bottom…)
*** rt_sigreturn(0x11) = 21763
dup2(11, 2) = 2
close(11) = 0
read(10, "", 8192) = 0
exit_group(0) = ?
Run Code Online (Sandbox Code Playgroud)
小智 9
我遇到了类似的情况,这是因为该端口已被另一个服务使用。
我是怎么发现的?
尝试跑步
sudo nginx
Run Code Online (Sandbox Code Playgroud)
而不是将其作为服务启动,它应该显示错误消息。
日志文件和父目录是否由 拥有或可读www-data
?您想要提供服务的文件、目录和父目录是否属于 或 可以读取www-data
?
你可以试试strace。如果是这样运行:
sudo strace service nginx start
这将产生大量的输出。在接近尾声的地方,您可能会看到权限错误。将 strace 输出保存到文件中并通过该文件进行 grep 可能会更容易。
另一种选择是切换到www-data
用户,看看在手动读取/写入日志文件或读取您想要服务的其他文件时是否出现任何错误。即使www-data
外壳很差,你也可以这样做:
sudo su -s /bin/bash www-data
如果您whoami
在该 shell 中运行,它应该显示www-data
.
归档时间: |
|
查看次数: |
29019 次 |
最近记录: |