Apache2 运行良好一段时间,然后停止提供内容,重新启动时出错

2024-01-11

我的系统

  • Apache2 在 Debian 7 Wheezy 上运行
  • 它是一台具有一个 IPv4 地址和多个虚拟主机的物理服务器。
  • 网络应用程序:Polaric、Redmine、phpMyAdmin 等
  • PHP 信息在这里:http://tracking1.sfrkh.net/phpinfo/ http://tracking1.sfrkh.net/phpinfo/(问题解决后将被删除)

问题描述

当我的服务器启动时,一切正常。 Apache2 开始提供内容,并且我的网站按预期运行。

“一段时间”(几天到几周)后,我无法再访问我的任何网站。 Apache2 停止向我的浏览器提供内容。

这是我几个月来反复出现的问题。我第一次体验它是在安装和配置所有内容后几天。

问题解决1

如果我重新启动,一切都会恢复正常。 “一段时间”后问题再次出现。

问题解决2

首先,当我尝试启动或重新启动 apache2 时:

# apache2ctl start 
- OR -
# /etc/init.d/apache2 start
(98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.

然后我使用 netstat 检查监听套接字:

# netstat -ltnp | grep ':80'
tcp  0  0 0.0.0.0:8081    0.0.0.0:*       LISTEN      16100/jsvc.exec
tcp6 0  0 :::80           :::*            LISTEN      14794/apache2

然后我尝试停止 apache2:

# apache2ctl stop
httpd (pid 9124?) not running

- or -

# /etc/init.d/apache2 stop
Stopping web server: apache2.

然后我再次运行 netstat 命令,得到与上面完全相同的结果。连PID都没有改变。

当我从 netstat 中杀死 PID 并再次启动 apache2 时:

# kill -9 14794
# apache2ctl start

..然后一切恢复正常。

一切恢复正常后Netstat:

# netstat -ltnp | grep ':80'
tcp  0  0 0.0.0.0:8081    0.0.0.0:*       LISTEN      16100/jsvc.exec
tcp6 0  0 :::80           :::*            LISTEN      16434/apache2

当问题存在时的 netstat 和一切正常后的 netstat 对我来说似乎没有什么不同。只是 PID 发生了变化。

“一段时间”后问题再次出现。

Question

我不知道从这里该去哪里。尝试搜索谷歌、这些论坛、其他论坛,但找不到适合我的解决方案。正如您所看到的,我让服务器恢复并运行,但问题一次又一次出现。

有什么想法可能导致这种情况吗?

Note

我希望我已经转向正确的论坛。谷歌是我的朋友,大多数关于类似主题的有用建议都来自这个论坛:)

预先感谢您的任何帮助!


The Apache error log may have more information.

这看起来像是一个开始的地方。

看起来这里有两个问题:1)apache 一段时间后失败,2)发生这种情况时你无法重新启动 Apache。

先说问题2。一种可能性是您正在运行两个 Apache 安装,其中一个正在抢占另一个的端口。

或者,Apache 正在死亡,正在重新启动,但没有正确写入其 PID 文件,因此当您要求它重新启动时,它无法正确地终止自己。

或者,它可以很好地写入 PID 文件,但 apache2ctl (或运行它的用户)没有对它们的读取权限(不太可能)。

不管怎样,PID 文件看起来都是错误的,因为它正在寻找 PID 9124,但 Apache 正在 PID 14794 上运行。并且考虑到“无法打开日志”,这看起来像是一个权限问题。尝试以对日志和 pid 文件具有读/写访问权限的身份重新启动 Apache,例如sudo apachectl graceful,或者以 apache 用户身份执行此操作。

如果有效,那么作为解决方法,您可以尝试定期运行apache2ctl graceful通过 root 或 apache 的 cron - 但这是一个令人讨厌的、令人讨厌的拼凑。

更糟糕的是,像这样的事情会确保它死掉并重新启动: apache2ctl 优雅 || (pkill apache2 && apachectl 启动)

但真正要做的是找出失败的原因——问题 1。

我敢打赌,这又是 PID 文件的权限问题:也就是说,在 httpd.conf 中,您已经asked它在一定数量的连接(MaxRequestsPerChild 设置)后重新启动连接处理程序,但是当它们重新启动时,它们无法写入 pid 文件来更新它们。这可能会导致这种情况。不过,很多其他事情也是如此。

不幸的是,调试需要检查 PID 文件夹及其之上的所有文件夹的文件权限; apache 运行的进程 ID 和用户(ps -ef | grep -Pi "apache|http"); pid 文件的内容;您运行 apache2ctl 的用户;你的 httpd.conf 的内容;以及您的系统日志的内容。

这超出了我们在这里调试的范围,但也许如果您在这些内容中搜索看起来相关的内容,然后发布它们呢?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apache2 运行良好一段时间,然后停止提供内容,重新启动时出错 的相关文章

  • 根据选择值显示/隐藏字段

    我试图根据我选择的字段之一的值显示和隐藏一些表单字段 我希望使用数组来保存每个选择值应该显示的内容和不应该显示的内容 以将我从大量的 switch 语句中拯救出来 但无法弄清楚如何做到这一点 我正在使用 PHP 和 jQuery 任何帮助都
  • 正则表达式将从文本文件中提取句子

    我需要一个正则表达式来从文本文件中提取句子 示例文本 以 2004 年底发生的亚洲海啸灾难为例 对 Google 新闻 http news google com 的查询在一个月内 1 月 17 日 返回了超过 80 000 篇有关该事件的在
  • while 循环中的表并排

    in a while loop its creating a list of heading and image links i want to display it as side by side like in following im
  • PHP 和 MySQL - 高效处理多个一对多关系

    我正在寻求一些有关使用 MySQL 和 PHP 检索和显示数据的最佳方法的建议 我有 3 个表 所有一对多关系如下 Each SCHEDULE有很多覆盖每个覆盖都有很多地点 我想检索这些数据 以便它可以全部显示在单个 PHP 页面上 例如列
  • Bash - 在与当前终端分开的另一个终端中启动命令的新实例

    我有一个简单的 bash 脚本 test sh 设置如下 bin bash args if args 0 check capture then watch n 1 ls lag home user capture0 watch n 1 ls
  • 如何使用 PHP 从图像文件中读取 Lightroom 关键字?

    我有一个照片社区 www jungledragon com http www jungledragon com 允许用户上传照片 我的平台是 PHP CodeIgniter 作为上传过程的一部分 我已经使用 PHP 读取 EXIF 信息ex
  • 静态方法的 Java 内存模型

    我来自操作系统和 C 语言背景 在代码编译时 世界很简单 需要处理和理解堆栈 堆文本部分等 当我开始学习 Java 时 我确实了解 JVM 和垃圾收集器 我对静态方法感到很有趣 根据我的理解 类的所有实例都会在堆中创建 然后被清理 但是 对
  • PHP比较两个字符串的随机位置

    PHP比较两个字符串 示例我得到了一串数字 1 2 2 1 and another is 2 1 2 1 结果是 true 因为它只是 1 2 2 1 和 2 2 1 1 的位置洗牌 但如果该值为 1 2 2 2 and another i
  • PHP—array_merge_recursive() - 相同键没有数组

    php a php gt data1 tag gt div classes gt 1 2 3 php gt data2 tag gt section classes gt 2 3 4 5 6 php gt result array merg
  • 通过 SO_RCVTIMEO 套接字选项在 Ruby 中设置套接字超时

    我试图通过 SO RCVTIMEO 套接字选项在 Ruby 中设置套接字超时 但它似乎对任何最近的 nix 操作系统都没有影响 使用 Ruby 的 Timeout 模块不是一个选择 因为它需要为每个超时生成和连接线程 这可能会变得昂贵 在需
  • 在我的 php 网络服务器内副本中启用 mysqli

    正如这里所讨论的 mysqli 直接运行时有效 但通过 js ajax 运行时无效 https stackoverflow com questions 31523601 mysqli works when run directly but
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工
  • Laravel nova diffForHumans 日期时间

    我对用户有字段last active 我想用 diffForHumans 或显示时间time from now来自 Moment js 我怎样才能做到呢 现在我只使用 DateTime make Activiy last active gt
  • 在生产服务器上使用 Subversion 使文件生效的最佳方法是什么?

    目前我已经设置了 subversion 这样当我在 Eclipse PDT 中进行更改时 我可以提交更改 它们将保存在 home administrator 中项目文件 该文件具有 subversion 推荐的 branches tags
  • 如何使用 PHP 正确添加跨站请求伪造 (CSRF) 令牌

    我正在尝试为我网站上的表单添加一些安全性 其中一个表单使用 AJAX 另一个表单是简单的 联系我们 表单 我正在尝试添加 CSRF 令牌 我遇到的问题是令牌有时只显示在 HTML 值 中 其余时间 该值为空 这是我在 AJAX 表单上使用的
  • 让登录更安全

    我已使用此代码进行管理员登录 仅当用户输入正确的用户名和密码时才应打开loginhome php 但后来我意识到这根本不安全 任何人都可以直接访问 mywebsite loginhome php 而无需登录 注销后 可以使用后退按钮打开 l
  • 如何在 *nix 中登录时运行脚本?

    我知道我曾经知道如何做到这一点 但是 如何在 unix 中登录时运行脚本 bash 可以 From 维基百科 Bash http en wikipedia org wiki Bash 28Unix shell 29 当 Bash 启动时 它
  • PHP 如何判断用户是否按下了 Enter 键或 Submit 按钮?

    我遇到的问题是我在一个表单中有多个提交输入 每个提交输入都有不同的值 我更愿意将它们保留为提交 Whenever the user presses Enter it is as though the topmost submit input
  • gmail 不断阻止 PHPmailer 登录

    我将在接下来的 8 小时内部署一个网站 而 Gmail 刚刚停止接受 PHPmailer 登录我的帐户 起初 它在测试过程中工作了几个小时 然后 它就停止工作了 我已经允许所有允许不太安全的应用程序从 gmail 登录 但它仍然不允许 ph
  • 程序退出后,TcpListener Socket 仍处于活动状态

    当我的程序退出时 我试图停止 TCP 侦听器 我不关心套接字或任何活动客户端套接字上当前活动的任何数据 套接字清理代码本质上是 try myServer Server Shutdown SocketShutdown Both catch E

随机推荐