我有一个接近新的服务器,并得到nginx按预期启动的问题。 我已经configuration了另一台服务器基本上相同的方式,它在那里工作。 我认为两者之间肯定有一些环境差异,但是我一直没有find。
简短版本:
Starts - sudo nginx Fails - sudo service nginx start Fails - sudo service nginx restart works - sudo service nginx stop
当命令失败时,他们并没有说出任何其他的内容:
* Restarting nginx nginx [fail]
日志文件(nginx [access or error],syslog)中没有其他内容或写入屏幕
更多细节:
两者都说configuration文件是好的
sudo service nginx configtest sudo nginx -t
我检查了nginx.conf的权限,它们都是正常的(与正在运行的服务器相同)双重检查了www-data是否可以访问日志文件,
两个服务器上的/etc/init.d/nginx文件是相同的,所用命令也一样(见上)
日志文件确实存在
用户/组www-data确实存在
Ubuntu 12.04 LTS
nginx 1.6
执行请求 – sudo strace服务nginx从每个erver开始除了下面的第一部分外,我看到的在两个不同的服务器上运行的唯一的其他区别就是指针和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) = ?
===============失败的人
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) = ?
我遇到了类似的情况,这是因为该端口已被其他服务使用。
我是如何发现的?
尝试运行
sudo nginx
而不是将其作为服务启动,并显示错误消息。
这不会是一个非常令人满意或受欢迎的答案,但这是我发现的。
似乎这个暴发户机制对于超出了nginx本身所关心的外部条件非常敏感。
因为我有一个在新贵之外开始nginx的权宜之计,所以我继续更新我的服务器。 当重新启动nginx以确保它正在使用当前环境时,我使用了“sudo service nginx restart”来停止当前环境,然后手动input在启动脚本中失败的启动命令(停止工作是开始失败)。 这样做一段时间后,突然更新子域和文件与其他小事情一起服务。 “sudo服务nginx重新启动”工作。 手动启动nginx或者“sudo service nginx restart”命令都没有发现任何可以find的错误/警告。
我所能想到的是,一定有某种条件低于发布任何types的暴发户的错误或警告,而不是nginx。 虽然这足以让它失败,但它并没有足够的理由去陈述任何实际的信息,为什么它失败了。 Arrgh!
日志文件和父目录是由www-data拥有还是可读的? 您想要服务的文件和目录以及父目录是否拥有或可以通过www-data ?
你可以试试strace。 如果这样运行:
sudo strace service nginx start
这将产生大量的输出。 在接近尾声的地方,你可能会看到一个权限错误。 将strace输出保存到一个文件并通过grep可能会更容易。
另一个select是切换到www-data用户,看看是否在手动读取/写入日志文件或读取其他要提供的文件时出现错误。 即使www-data有一个糟糕的shell,你可以这样做:
sudo su -s /bin/bash www-data
如果你在shell中运行whoami ,应该说www-data 。
你可以尝试使用下面的Upstart工作,看看是否有什么不同:
description "nginx - small, powerful, scalable web/proxy server" start on filesystem and static-network-up stop on runlevel [016] or unmounting-filesystem or deconfiguring-networking expect fork respawn pre-start script [ -x /usr/sbin/nginx ] || { stop; exit 0; } exec /usr/sbin/nginx -q -t -g 'daemon on; master_process on;' end script exec /usr/sbin/nginx -g 'daemon on; master_process on;' pre-stop exec /usr/sbin/nginx -s quit