Nginx进程已经死了。为什么以及在哪里看?

时间:2018-03-23 09:41:25

标签: debugging nginx

最近我的服务器上的nginx在一段时间后大约每天下降2次,并且不存在或显示在进程中。

我检查了nginx错误文件,发现没什么特别的。有时它会在连接到上游时“连接被拒绝”,这是确定。(这是因为我删除了一个应用程序并且它没有回答nginx) 访问日志也可以。访问日志中没什么奇怪的。

我检查了systemctl nginx status,它给了我这个: systemctl nginx status result

没有提供有关nginx失效原因的任何信息。它只是说nginx是不活动的(死的),我自己也知道。它也说ExecStop失败了。当nginx成功运行时会出现这一行,所以我认为这不重要。

我检查了kern.log并没有出现内存情况似乎杀死了nginx。 (我有足够的内存用于我的应用程序和nginx以及其他东西)

那么为什么我的nginx会崩溃? 我应该在哪里寻找可能的问题?

1 个答案:

答案 0 :(得分:1)

只是张贴报告我也收到了类似的错误。然而,我的每天只发生一次,午夜后几分钟。我正在运行Ubuntu 16.0.4 LTS。如果我重新启动服务,一切都会很好,直到第二天的午夜。

你的帖子是第一条类似相同模式的信息,所以我希望有人可以指出我们正确的方向。如果我在那之前找到任何有用的东西,我会报告。

图片:Error

- - - - 的更新 ------

我很自信我找到了解决问题的方法!但是,我不能确认,直到明天午夜时钟到来之后:)

确认问题:

使用journalctl我发现该服务在午夜停止了,然后出现“服务无法重新加载”的错误......这里的关键字是“重新加载”。有了这个,我想知道为什么它发送一个RELOAD,如果服务已经停止....嗯....所以要确认,我用“sudo systemctl stop nginx”手动停止我的nginx服务然后运行“sudo systemctl reload nginx“我复制了和以前一样的错误!

基本上,问题在于Nginx在尝试重新启动时会尝试RELOAD。

<强>故障排除:

由于Nginx在执行systemctl命令时使用/etc/init.d/nginx作为Upstart脚本,我发现可能的问题是我从包含不正确(尽管是逻辑的)Upstart的过时仓库安装了我的Nginx包脚本。为了证实这一点,我去了Nginx的官方示例,并打开了“Debian PHP-FPM(Lenny / Squeeze)”示例(https://www.nginx.com/resources/wiki/start/topics/examples/initscripts/),当我将init.d脚本与示例进行比较时,我找到了两个线条不同!你不知道吗,两条不同的线路是重装和重启功能!

图片:Incorrect

图片:Correct

有了这个,我只是编辑了 /etc/init.d/nginx ,在Restart()函数之后只有“强制重载”的情况,并在之后删除了“强制重载”的情况Reload()函数。

TLDR:Nginx安装包含一个不正确的Upstart脚本,该脚本调用reload()而不是restart()。修改/etc/init.d/nginx以在接收到“强制重载”的情况下调用Restart()函数而不是reload()

- - - - - - - - 建议 OP:我建议使用journalctl -u nginx.service并查看服务是否变为非活动状态。 systemctl status仅显示最近的条目,因此journalctl将是一个更好的选择。如果您愿意,请在此处发布您的输出,以便我们进一步了解它。